실행 파일은 std 입력을 어떻게 변경합니까?

실행 파일은 std 입력을 어떻게 변경합니까?

goto 명령이 포함된 스크립트가 있다고 가정해 보겠습니다.

goto 명령은표준 입력이와 같은 라인의 경우 : jumpHere.

그러나 표준 입력은 기본적으로 터미널로 설정됩니다. 파일/스크립트가 goto 명령의 표준 입력인 경우에만 의미가 있습니다.그렇다면 어디서/누가/무엇이 표준 입력을 변경했습니까?

PS 저는 예전의 Thompson-Shell, Unix v6에 대해 이야기하고 있습니다.

답변1

이는 goto별도의 유틸리티이므로 Thompson 셸 자체의 일부가 아닙니다.

Thomson 쉘을 호출하는 경우:

sh the-script

sh당신이 쓴 the-script것처럼 (fd 0) 열기stdin

sh < the-script

대신에.

goto명령은 seekstdin을 처음으로 되돌린 다음(분명히 stdin이 일반 파일이 아닌 터미널인 경우 작동하지 않습니다), 그 안에서 태그를 찾고 파일에 커서를 둡니다. 그런 다음 쉘은 거기에서 계속됩니다.

스크립트의 명령이 stdin의 원시 내용을 읽도록 하려면 <-특수 리디렉션 연산자를 사용할 수 있습니다.

cmd <- 

동일한 명령을 사용하면 goto다음과 같이 Thomson 쉘 스크립트를 호출하는 경우에도 스크립트가 작동합니다.bash

bash < the-script

ksh93goto특별한 방법을 사용하여 시뮬레이션 가능구하다리디렉션 연산자. 예를 들어 다음 Thomson 쉘 스크립트는 다음과 같습니다.

echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
goto start
echo End never reached

다음과 같이 작성할 수 있습니다 ksh93.

echo Start
: start
ls -ld /proc/self/fd/0
sleep 1
exec <#((0)) <#": start"
echo End never reached

호출되면 둘 다 실행됩니다(V6 명령이 있다고 가정 goto).ksh93

ksh93 < the-script

관련 정보