bash <script
왜 다른 가요 bash script
? 다음을 포함하는 스크립트를 사용하여 이 작업을 시도할 때:
cat
hello
world
첫 번째 경우에는 내가 기대했던 결과를 얻었습니다.
hello
world
하지만 두 번째 경우에는 ctrl-D를 입력해야 하며 다음과 같은 결과를 얻습니다.
script: line 2: hello: command not found
script: line 3: world: command not found
나는 이것이 두 번째 경우에 bash가 2행과 3행을 cat에 대한 입력으로 읽지 않고 명령으로 읽는다는 것을 의미한다고 생각합니다.
나는 bash 인수 처리가 간단하다고 생각했지만 적절한 파일을 열고 dup2()를 사용하면 해당 스크립트 파일이 파일 설명자 0으로 설정되므로 파일을 인수 또는 입력으로 리디렉션해도 큰 차이가 나지 않습니다.
bash는 전체 파일을 읽고 한 줄씩 실행합니까?
답변1
첫 번째 경우에는 bash에 표준 입력으로 스크립트를 제공합니다.
- 배쉬 실행 고양이
- cat은 stdin에서 파일의 나머지 부분을 읽고 stdout에 복사합니다.
두 번째 경우:
- bash 실행 고양이 명령
- cat은 ctrl-d를 눌러 cat을 닫을 때까지 표준 입력(파일이 아님)에서 읽습니다.
- bash는 다음 줄을 읽고 실행합니다...
이와 같이 명령줄에 파일 이름을 입력하면 일반적으로 파일은 bash 스크립트이며 프로그램 자체로 처리됩니다.
또 다른 방법은 이것을 파일에 넣는 것입니다.
cat <<EOF
hello
world
EOF
이 경우 stdin은 쉘에 의해 리디렉션되고 cat은 두 번째 EOF
. EOF(두 곳)를 원하는 표시로 바꿀 수 있습니다.