"bash 실행 파일"과 "bash -c 실행 파일"의 차이점

"bash 실행 파일"과 "bash -c 실행 파일"의 차이점

내 이해는 이것이 bash -c file대화식 bash 쉘에서 호출하는 것과 동일하다는 것입니다 file. 여기서는 bash filebash를 사용하여 파일을 해석하는 것을 의미합니다(마치 쉘 스크립트인 것처럼). 이것이 정확합니까? 이것이 bash <executable>exec 파일을 포크하고 실행하는 대신 파일을 쉘 스크립트로 해석하려고 하기 때문에 실행할 수 없는 이유입니까 ?

답변1

먼저,배쉬 문서:

-c 문자열

옵션 처리 후 문자열에서 명령을 읽고 실행한 후 종료합니다. 나머지 매개변수는 $0부터 시작하여 위치 매개변수에 할당됩니다.

-c따라서 옵션을 제공할 때 bash뒤의 문자열을 -c일련의 명령으로 생각한 다음 하위 프로세스 환경에서 해당 명령을 실행하십시오. 따라서 호출할 때 bash -c file이를 명령으로 bash취급 하고 환경 변수를 찾아 찾으십시오. 발견 되면 실행하고, 그렇지 않으면 명령을 찾을 수 없음 오류가 발생합니다.filePATHfile

당신이 전화하면 bash filebash는 file그것을 다음과 같이 취급합니다.쉘 스크립트, 명령을 읽고 실행한 file다음 종료합니다. 또, 부터배쉬 문서:

옵션 처리 후에 인수가 있고 -c 및 -s 옵션이 제공되지 않은 경우 첫 번째 인수는 쉘 명령이 포함된 파일의 이름으로 간주됩니다(쉘 스크립트 참조). 이런 방식으로 Bash를 호출하면 $0이 파일 이름으로 설정되고 위치 인수는 나머지 인수로 설정됩니다. Bash는 이 파일에서 명령을 읽고 실행한 다음 종료됩니다. Bash의 종료 상태는 스크립트에서 실행된 마지막 명령의 종료 상태입니다. 명령이 실행되지 않으면 종료 상태는 0입니다.

따라서 귀하의 이해가 정확합니다.

답변2

요약하자면:

  • bash <file>실행만 가능쉘 스크립트
  • bash -c <file>실행 가능바이너리 파일 (예 /usr/bin/date: /usr/bin/echo) 및실행 가능 파일 쉘 스크립트

관련 정보