2016-06-16 90 views
1

如何捕捉用管道調用的shell腳本的輸入,而不會永遠等待輸入的風險?外殼:捕捉用戶輸入與貓

echo "hello world" | mysript.sh 

在腳本中,我嘗試獲取輸入:

input=$(cat) 

但在某些情況下cat命令導致整個腳本超時,因爲它等待輸入。

+1

你想捕捉輸入,但你不想等待輸入? –

+2

輸入必須以EOF = ctrl + D結束。 –

+0

請考慮在腳本中使用'read'。您可以逐行讀取,而且您的shell可能支持超時和單字符讀取等額外工具。 – ghoti

回答

0

假設要處理從shell腳本管道數據,嘗試:

在腳本:

read LINE 
echo $LINE 

在命令行:

echo "hello world" | ./mysript.sh 

在這種情況下,hello world會讀入LINE

+0

嘗試使用包含匹配模式的任何內容,例如「/ etc/*'」(即雙引號「$ LINE」)。 – Kusalananda