
我想用從文件中讀取的命令行填充變數並執行它。當它是單一命令時沒有問題。當我使用 | 時,它不起作用。有什麼幫助嗎?謝謝
$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1
答案1
問題是,管道 ( |
) 是 shell 運行的「元」命令,它連接兩個不同的命令。ls -1 | tail -1
執行兩個命令 (ls
和tail
) 並使用 shell 建構 ( |
) 連接到兩個命令也是如此。 (所以你的標題A變數內的命令是不正確的,因為你的問題確實是多種的a 內的命令單身的多變的)
無論如何,解決方案是使用 shell 解析/執行命令:
f="ls -1 | tail -1"
sh -c "${f}"
或者,您也可以使用eval
,它無需分叉新的 shell 進程即可工作:
f="ls -1 | tail -1"
eval "${f}"
答案2
您可以使用如下函數;
f() { ls -1 | tail -1; }
例如;
user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt