此問題的關鍵值與使用破折號「 - 」重定向stdin流有關。破折號重定向從標準輸入到標準輸出
我有下面的代碼中基本的測試腳本:
#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...
哪個殼的一個命令可以模擬用戶輸入在這種情況下?
謝謝。
此問題的關鍵值與使用破折號「 - 」重定向stdin流有關。破折號重定向從標準輸入到標準輸出
我有下面的代碼中基本的測試腳本:
#!/bin/bash
# This causes the shell to await user input.
file -
# Need to emulate user input here...
哪個殼的一個命令可以模擬用戶輸入在這種情況下?
謝謝。
流水線cmd1 | cmd2
根據定義連接標準輸出文件描述符cmd1
作爲cmd2
的標準輸入文件描述符。
echo foo | file -
這個特殊的例子很難用; file
命令對於在流水線中使用的那種短暫數據運行沒有多大意義。一個更有用的例子是在文件上運行file
。如果你確實希望這個文件是標準輸入,那麼簡單的輸入重定向就可以做到這一點。
file - </path/to/example/file
或者,你可能會尋找這樣的:
file $(locate example/file)
其中locate
是打印到您可能需要爲實際輸入參數file
的文件的完整路徑的命令的例子。
非常感謝。你的兩個答案都很有幫助。這是我正在尋找的。 –
你可能需要一個here document:
#!/bin/bash
# This causes the shell to await user input.
file - <<'EOF'
This is what the user
might have typed
if it wasn't in a here document.
${BASH:=head} $(ls | wc -l)
EOF
here文檔持續到只包含標記字線。 在該示例中,標記字是EOF;你可以選擇你喜歡的任何名字(經常使用!
)。標記詞周圍的引號意味着在這個文檔中不會執行shell擴展,所以shell的最後一行不會被擴展。如果缺少引號(如<<EOF
),則會發生shell擴展。這在您需要時很有用。
謝謝你的回答。瞭解輸入能力對我非常有幫助。 –
檢查這個帖子http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe 我認爲它包括你的問題的答案 – weberik
你問'bash'爲在問題標題中是shebang還是'dash'? –
無論如何,它們在這個特定的方面是兼容的;但是你應該一般詢問關於Bourne'sh'和兼容的東西。 – tripleee