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
명령은 seek
stdin을 처음으로 되돌린 다음(분명히 stdin이 일반 파일이 아닌 터미널인 경우 작동하지 않습니다), 그 안에서 태그를 찾고 파일에 커서를 둡니다. 그런 다음 쉘은 거기에서 계속됩니다.
스크립트의 명령이 stdin의 원시 내용을 읽도록 하려면 <-
특수 리디렉션 연산자를 사용할 수 있습니다.
cmd <-
동일한 명령을 사용하면 goto
다음과 같이 Thomson 쉘 스크립트를 호출하는 경우에도 스크립트가 작동합니다.bash
bash < the-script
ksh93
goto
특별한 방법을 사용하여 시뮬레이션 가능구하다리디렉션 연산자. 예를 들어 다음 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