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