별칭을 생성할 때 두 가지 다른 경로를 제공해야 하는 이유는 무엇입니까?

별칭을 생성할 때 두 가지 다른 경로를 제공해야 하는 이유는 무엇입니까?

발행하면 alias --help다음과 같은 결과가 출력됩니다.

alias: usage: alias [-p] [name[=value] ... ]

내가 이해한 바로는 다음과 같이 별칭을 입력하고 스크립트 파일에 대한 실제 경로를 제공하기만 하면 됩니다.

alias scr = /usr/local/tools/some_script.sh

그러나 별칭을 생성할 때 때때로 2개의 경로가 제공되는 것을 발견했습니다. 예를 들어 alias scr회사 컴퓨터에서 명령을 실행하고 다음과 같은 출력을 얻었습니다.

alias scr = 'sudo /bin/sh /usr/local/tools/some_script.sh'

/bin/sh이 경우 추가 경로를 도입하는 목적은 무엇입니까?

/bin/sh에는 bash 디렉토리에 대한 심볼릭 링크만 포함되어 있습니다.

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug  6  2017 /bin/sh -> bash

답변1

정의된 별칭별

alias scr='sudo /bin/sh /usr/local/tools/some_script.sh'

(주변에 공백이 있으면 오류가 발생합니다 .) 호출은 =스크립트의 경로 이름을 인수로 사용하여 쉘 인터프리터를 명시적으로 호출하여 sudo스크립트를 실행합니다 ./usr/local/tools/some_script.sh/bin/sh

실행 파일의 경로 이름입니다 /bin/sh(귀하의 경우 가리키는 심볼릭 링크이지만 중요하지 않습니다). 쉘 스크립트를 실행하는 데 사용됩니다. 이 경우 at에 대한 스크립트는 아마도 에 대해 작성된 스크립트이므로 별칭은 해당 스크립트가 인터프리터로 호출되도록 보장합니다.sh/binbashsh/usr/local/tools/some_script.shsh/bin/sh

스크립트가 실행 가능하고 #!첫 번째 줄에 유효한 스크립트 해석기를 가리키는 -line이 있는 경우 /bin/sh이 비트를 제거할 수 있습니다 .

즉, 별칭을 사용하면 명령을 실행할 수 있습니다.

/bin/sh /usr/local/tools/some_script.sh

루트 ID를 입력하면 됩니다 scr.

관련 정보