어디서나 스크립트를 실행


8

스크립트가 있습니다 :

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

여기에 있습니다 : /home/myuser/bin/abspath.sh실행 권한이 있습니다.

실행 echo $PATH하면 다음과 같은 결과가 나타납니다./usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin

모든 디렉토리에서 전화 abspath <some_path_here>를 걸고 스크립트를 호출 할 수 있기를 바랍니다 . 나는 bash를 사용하고 있는데, 내가 뭘 잘못하고 있니?

답변:


30

입력하려고 abspath하지만 프로그램의 이름이 지정 abspath.sh됩니다. 문제는 PATH에 있는지 여부에 관한 것이 아니라 단순히 이름을 사용하여 호출하지 않는다는 사실입니다.

두 가지 옵션이 있습니다.

  1. abspath.sh대신 입력하십시오 .
  2. 프로그램 이름을로 바꿉니다 abspath.

1
... 또는 simlink를 작성하십시오 cd $HOME/bin ; ln -s abspath.sh abspath. 이를 통해 스크립트의 올바른 확장자를 유지하고 원하는 이름의 도구를 사용할 수 있습니다. (예를 들어, 쉘 스크립트를 파이썬 스크립트로 대체 할 수도 있습니다 ...)
F. Hauri

또는 별명을 작성하십시오.
Jenny D

6

이 코드는 쉘 함수로 코딩 할 수있을 정도로 작습니다.

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

그리고 네, 당신은 모든 인용문을 원합니다.


4

.bashrc 파일에 명령을 추가하여 별명을 설정하십시오.

alias abspath='sh /home/myuser/bin/abspath.sh'

그리고 파일을 소싱하는 것을 잊지 마십시오.


1
왜 sudo를 원하십니까?
CVn

1
sudo를 불필요하게 사용하는 것은 명백한 잘못이기 때문에 평판이 충분하면 투표를 거부합니다. 어떤 사람들은 필요할 때 언제 왜 배우지 않고 모든 것에 자동으로 sudo를 사용하는 것 같습니다.
Scott Severance

너희들과 동의했다. 그리고 sudo를 언제 사용해야하는지 알고 있습니다. 나는 모든 질문을 보지 못했습니다.
Balasekhar Nelli

2

bash 스크립트의 이름을 바꾼 abspath다음 bin디렉토리 로 옮길 것 입니다. abspath언제 어디서나 전화를 걸 수 있습니다


0

세 번째 옵션은 abspath.sh 스크립트를 가리키는 abspath라는 별명을 작성하는 것입니다.


5
수용 된 솔루션이 설명하는 것처럼 수정 된 경우 필요하지 않으며 상당히 복잡하며 실제로 문제를 해결하는 대신 문제를 숨 깁니다.
dawud 2016 년

논쟁의 여지가 없지만 하나의 솔루션으로 해결하면 다른 솔루션을 적용 할 필요가 없습니다. 예, 이것은 반창고 솔루션이며 쉘 스크립트를 직접 참조하는 것이 더 이상적인 수정입니다.
tokamak 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.