我想用从文件中读取的命令行填充变量并执行它。当它是单个命令时没有问题。当我使用 | 时,它不起作用。有什么帮助吗???谢谢
$ 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