2017-04-24 91 views
-1

我正在編寫將用於一般形式的Ubuntu bash腳本。我想知道是否可以通過管道方式傳遞多個命令。這就是我想才達到:Ubuntu腳本接受管道命令

#!/bin/bash 
cat $1 | $2 | while read line 
do 
    # do something 
done 

的腳本是這樣運行的:

./myscript.sh data.txt "grep status | grep Approved" 

這是可能被achived。我有一個去,但只有得到:

./myscript.sh data.txt "grep status" 

這工作。

這可能嗎?我可以重複使用這個腳本來傳遞不同的命令來做不同的事情,但每個命令都有一個共同的代碼,即myscript.sh。

當的做一些事情被替換爲:

echo $2 

這不顯示的內容是在向第二個參數類型。

回答

0

問題是|必須從字面上出現在命令行中才能被解釋爲控制操作符。作爲可變擴展的結果,它被解釋爲字符串|,即,如果您在命令行上輸入了'|'

您可以使用eval讓shell將該變量解釋爲新的管道或命令列表。然而,它會打開另一種蠕蟲 - 你可能需要引入另一個級別的引用,並且你必須小心不要遇到安全問題。

pipeline='grep a | grep b' 
echo a b c | eval "$pipeline"