2015-11-04 51 views
-1

我想編寫一個腳本,在其參數中獲取命令並在其運行時執行它。例如,如果叫ex_script劇本,寫編寫獲取命令並執行它的腳本

ex_script "cat file1.txt | wc -l" 

和ex_script是:

var=`"${1}"` 
echo $var 

將在var指定的行數在file1.txt,然後打印出來。

但它給了我

./ex_script: line 3: cat file1.txt | wc -l: command not found 

如何正確地寫這個?

+2

這不能在一般情況下進行。參見[Bash FAQ 050](http://mywiki.wooledge.org/BashFAQ/050)。 –

+0

'ex_script'只是重新實現'sh -c'。 – chepner

+0

什麼是谷歌? – Noproblem

回答

1

使用eval

var=$(eval "$1") 
echo "$var" 
+0

或'sh -c「$ 1」'。 – chepner

+0

當然,但是當你可以使用現有的shell時,爲什麼要啓動另一個shell呢?另外,如果它需要訪問當前shell中定義的變量,那麼它將不起作用,除非您導出它們。 – Barmar

+0

我的印象是,OP只想編寫一個腳本,它將任意命令行作爲輸入,並輸出運行結果。而且,'$(...)'無論如何都會分配一個新的shell(不是嗎?)。 – chepner