Bash 스크립트 모드 실행

Bash 스크립트 모드 실행

달리기의 차이점은 무엇입니까?

:~$./myscript

:~$bash ./myscript

:~$bash -c "./myscript"

( ./myscript실행 가능하다고 가정)?

답변1

./myscriptmyscriptShebang에 지정된 통역사로 실행됩니다 . myscript실행 가능한 비트를 설정해야 합니다.

bash ./myscriptbash로 실행됩니다 myscript. myscript실행할 수 있을 필요가 없으며 bash에는 실행할 파일이 제공되므로 PATH에서 해당 파일을 찾지도 않으므로 bash myscript잘 작동합니다.

bash -c "./myscript"./myscript명령을 실행하기 위해 bash 인스턴스를 시작합니다. 그러면 Shebang에 지정된 인터프리터로 명령이 실행됩니다 (따라서 bash 프로세스가 추가된 첫 번째 경우와 유사합니다). 의 인수는 bash -cbash 명령 또는 명령 시퀀스(try bash -c "echo 'aa';echo 'bb'")입니다.

그리고 당신은 언급하지 않았습니다. ./myscript

답변2

myscript실행 가능하고 바이너리를 가리키는 shebang 라인이 있다고 가정합니다 . 단독으로 bash실행하거나 실행하는 것에는 차이가 없지만 실행하면 하위 쉘 수준이 하나 더 생성됩니다. 이는 var( 3 x bash ) 를 확인하여 확인할 수 있습니다../myscriptbash ./myscriptbash -c ./myscriptSHLVLbash terminal > running bash -c > running shebang line with bash

일반적으로 bash 터미널 세션에 있을 때 ./myscriptshebang 라인을 실행하면 명령을 실행하는 bash라인이 호출되고 생성됩니다 .bash subshell

30311 pts/0    Ss     0:00 -bash
 8419 pts/0    S+     0:00  \_ /bin/bash ./test.sh
 8420 pts/0    R+     0:00      \_ ps f
SHELL LEVEL: 2  # is 3 when running with bash -c
8419  # that's the $BASHPID

아래 코드(test.sh)를 가져와 직접 시도해 보세요.

#!/bin/bash

ps f
echo "SHELL LEVEL: $SHLVL"
echo $BASHPID

관련 정보