
goto 명령이 포함된 스크립트가 있다고 상상해 보세요.
goto 명령은 다음에서 검색합니다.표준 입력이와 같은 라인의 경우 : jumpHere
.
그러나 표준 입력은 기본적으로 터미널입니다. 파일/스크립트가 goto 명령에 대한 표준 입력인 경우에만 의미가 있습니다.그렇다면 std 입력은 어디서/누구/무엇으로 변경됩니까?
추신. 나는 오래된 Thompson-Shell, Unix v6에 대해 이야기하고 있습니다.
답변1
이는 goto
별도의 유틸리티이므로 Thompson 쉘 자체의 일부가 아닙니다.
Thomson 쉘을 다음과 같이 호출하면:
sh the-script
sh
마치 작성한 것처럼 (fd 0) the-script
에 열립니다 .stdin
sh < the-script
대신에.
이 goto
명령은 seek
stdin을 처음으로 되돌린 다음(분명히 stdin이 터미널이고 일반 파일이 작동하지 않는 경우) 거기에서 레이블을 찾고 그 바로 뒤에 파일에 커서를 남겨 둡니다. 그런 다음 쉘은 거기에서 계속됩니다.
스크립트의 명령이 원래 stdin의 내용을 읽으려면 <-
특수 리디렉션 연산자를 사용하면 됩니다.
cmd <-
동일한 명령을 사용하면 Thomson 쉘 스크립트를 다음과 같이 호출하는 경우에도 goto
스크립트가 작동합니다 .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