simple_script.sh
다음 세 줄로 구성된 매우 간단한 스크립트가 있습니다.
bpeek 123450
bpeek 123451
bpeek 123452
내가 달리면
$ bash simple_script.sh
의 세 가지 bpeek
명령이 모두 simple_script.sh
실행됩니다.
하지만 내가 달리면
$ bash < simple_script.sh
bpeek
...첫 번째 명령만 실행 1 ,그리고스크립트 실행이 성공적으로 종료되었습니다(즉, $?
0과 같음).
bpeek
대신 (예 를 들어 ) 을 바꾸면 /bin/echo
두 가지 실행 방법 모두 simple_script.sh
세 가지 명령이 모두 실행됩니다.
나는 이전에 이 차이점을 본 적이 없다고 빠르게 덧붙였습니다(bash 스크립트를 실행하는 이 두 가지 방법 사이). 위에서 설명한 차이점은 명령과 다릅니다 bpeek
.IBM의 LSF 제품군). (명확하게 말하면 "bare" 명령은 bpeek
함수나 별칭이 아닌 파일로 확인하고 file
해당 파일을 "ELF 64비트 LSB 실행 파일"로 보고합니다.)
이 차이점 때문에 혼란스러워서 알아보고 싶습니다.왜그런 일이 일어난다.
내 질문은: 이 차이점을 어떻게 설명할 수 있습니까?
simple_script.sh
물론 이렇게 전화할 이유는 없습니다 .
$ bash < simple_script.sh
내가 여기서 한 일은 문제를 단순화하는 것입니다. 그러나 실제로는 다음 형식의 명령을 실행할 수 있기를 원합니다.
<PIPELINE> | bash
... 아래 형식의 여러 명령 (한 줄에 하나의 명령)을 <PIPELINE>
작성 하고 첫 번째 명령뿐만 아니라 모든 명령이 실행되기를 원합니다.stdout
bpeek <JOBID>
<PIPELINE>
무슨 일이 일어나고 있는지 더 잘 이해함으로써 모든 명령이 실행되도록 수정할 수 있기를 바랍니다 .
게다가 나는 무슨 일이 일어나고 있는지 이해하고 싶습니다. (결국 나는 언제나 내 무지를 받아들이고 의지할 수 있다 bash <( <PIPELINE> )
.)
FWIW: 문제는 에 국한된 것이 아닙니다 bash
. 위와 bash
같이 바꾸면 zsh
똑같은 일이 발생합니다.
1 좀 더 정확하게 말하면 첫 번째 명령의 출력만 bpeek
내 터미널에 표시됩니다.