추가 bash 호출 없이 링크된 명령에 일시적으로 경로를 추가하려면 Bash 한 줄로 작성하시겠습니까?

추가 bash 호출 없이 링크된 명령에 일시적으로 경로를 추가하려면 Bash 한 줄로 작성하시겠습니까?

생각해 보세요:

$ cd /tmp
$ echo "echo YES" >> prog/myprog
$ chmod +x prog/myprog
$ prog/myprog
YES
$ myprog
myprog: command not found

PATH다음과 같이 이름으로 호출하도록 일시적으로 수정할 수 있습니다 myprog.

$ PATH="$PATH":$(readlink -f prog) myprog
YES

...하지만 이 방법으로는 명령을 연결할 수 없습니다.

$ PATH="$PATH":$(readlink -f prog) myprog && myprog
YES
myprog: command not found

...분명히 수정된 콘텐츠 PATH는 두 번째 호출에 전파되지 않았습니다.

나는 이것을 할 수 있다는 것을 안다:

$ PATH="$PATH":$(readlink -f prog) bash -c "myprog && myprog"
YES
YES

...하지만 추가 절차를 호출해야 bash하고 더 나쁜 것은 인용해야 합니다.

extra를 호출하거나 인용할 필요 없이 한 줄에 명령을 연결하기 위해 임시로 PATH에 추가할 수 있는 방법이 있습니까 bash? 백틱을 시도했지만 작동하지 않습니다.

$ PATH="$PATH":$(readlink -f prog) `myprog && myprog`
myprog: command not found

답변1

서브쉘을 사용하는 것은 어떻습니까?

$ (PATH="$PATH:$(readlink -f prog)"; myprog && myprog)
YES
YES

답변2

이는 "일시적"이라고 생각하는 항목에 따라 다릅니다. 예를 들어 다음을 실행할 수 있습니다.

$ PATH="$PATH":$(readlink -f prog) 

myprog그런 다음 나머지 셸 세션을 마음껏 완료 할 수 있습니다 . PATH로그아웃하면 변경 사항이 즉시 사라집니다. 새 터미널을 열거나(그래픽으로 작업하는 경우), 다른 tty로 전환하거나(그렇지 않은 경우), 새 세션을 실행할 수 있습니다.

$ bash
$ PATH="$PATH":$(readlink -f prog) 
## Do your stuff here

$ exit

동일한 것을 실행하는 또 다른 방법은 다음과 같습니다.

PATH="$PATH":$(readlink -f prog) bash

그러면 새로운 bash 세션이 시작되고 PATH 변수가 변경됩니다. 일이 끝나면 곧바로 exit부모님에게로 달려가세요.

답변3

명령 실행 중에만 경로를 변경하려는 경우.
그런 다음 명령을 호출할 때마다 이를 설정해야 합니다.
이것은 별칭에 완벽하게 작동합니다.

alias myprog='PATH="$PATH":$(readlink -f prog) myprog'

사용:

$ myprog && myprog
YES
YES

물론, 같은 이름을 가진 함수도 마찬가지입니다.아니요일하다:

$ myprog(){ PATH="$PATH":$(readlink -f prog) myprog; }  ### DO NOT USE !!

정말 이런 것들이 필요한지 궁금합니다. 내부적으로 스크립트를 생성하는 경우 ~/bin(디렉토리를 생성한 후 로그인 ~/bin) PATH변수에는 이미 경로가 포함되어 있으며 이름을 지정하여 스크립트를 실행할 수 있습니다.

$ cd ~/bin                   ### create the dir if it didn't exist.
$ echo "echo YES" >> myprog
$ chmod u+x myprog
$ cd ~
$ myprog                     ### remember to reload ~/.bashrc (re-login).
YES

관련 정보