執行檔如何更改 std 輸入?

執行檔如何更改 std 輸入?

假設我有一個腳本,其中包含 goto 命令。

goto 指令將在標準輸入對於這樣的一行: jumpHere

但 std 輸入預設是終端。只有當檔案/腳本是 goto 命令的標準輸入時才有意義。那麼哪裡/誰/什麼改變了標準輸入?

附:我說的是舊的 Thompson-Shell,Unix v6。

答案1

請注意,這goto是一個單獨的實用程序,因此本身不是 Thompson shell 的一部分。

當您呼叫 Thomson shell 時:

sh the-script

sh打開(fd 0) 就像你寫的the-script一樣stdin

sh < the-script

反而。

goto命令會將seek標準輸入返回到開頭(顯然,如果標準輸入是終端機而不是常規文件,則不起作用),然後在其中尋找標籤,並將遊標留在文件中。然後 shell 將從那裡繼續。

如果您希望腳本中的命令從 stdin 的原始內容中讀取內容,則可以使用<-特殊的重定向運算子:

cmd <- 

請注意,使用相同的命令,如果您按以下方式呼叫 Thomson shell 腳本,goto您的腳本也可以使用:bash

bash < the-script

ksh93goto可以用特殊的方法來模擬尋求重定向運算子。例如這個 Thomson shell 腳本:

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

相關內容