ファイルを実行すると std 入力はどのように変化しますか?

ファイルを実行すると std 入力はどのように変化しますか?

goto コマンドを含むスクリプトがあるとします。

gotoコマンドは、標準入力このような行の場合: jumpHere

ただし、デフォルトでは標準入力はターミナルです。これは、ファイル/スクリプトが goto コマンドの標準入力である場合にのみ意味を持ちます。では、std 入力を変更するのはどこ/誰/何でしょうか?

ps. 古い Thompson-Shell、Unix v6 について話しています。

答え1

これはgoto別のユーティリティであり、厳密には Thompson シェルの一部ではないことに注意してください。

Thomson シェルを次のように呼び出します。

sh the-script

shthe-script(fd 0)で開くとstdin、次のように記述したのと同じになります。

sh < the-script

その代わり。

このgotoコマンドは、seekstdin を先頭まで戻します (stdin が端末で通常のファイルでない場合は当然機能しません)。次に、そこでラベルを検索し、その直後のファイルにカーソルを残します。その後、シェルはそこから処理を続行します。

スクリプト内のコマンドで stdin の元の内容を読み取る場合は、<-特別なリダイレクト演算子を使用します。

cmd <- 

同じコマンドで、次のように Thomson シェル スクリプトを呼び出す場合gotoもスクリプトが機能することに注意してください。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

どちらも、次のように呼び出すと実行されます (V6gotoコマンドがある場合) 。ksh93

ksh93 < the-script

関連情報