![将组合命令作为参数传递](https://linux22.com/image/109904/%E5%B0%86%E7%BB%84%E5%90%88%E5%91%BD%E4%BB%A4%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92.png)
考虑一个脚本pass_command
ls | "$@"
它接受命名命令作为参数
pass_command sort
#prints files sorted
对于所有实际目的来说这已经足够好了。不过我很好奇,是否有一种机制可以让我传递复合命令?就像是
pass_command (sort | uniq) #Forgive the silly example.
编辑:一个更复杂的例子引发了这个问题。
until who | grep mary
do
sleep 60
until
向玛丽发出登录信号。我想概括这一点以表明某些事件。直观的想法是这样的:
#watchfor
until "$@"
do
sleep 60
done
然后你可以称之为
watchfor (who | grep mary)
这就是我的想法。您可以为参数指定一个名称,上面的方法可以正常工作。这只是让我想到了这一点。
我想我是想了解隐藏信号命令的最惯用的方法。
答案1
您必须eval
在脚本中使用不仅仅是$@
一个简单的命令(脚本的参数必须作为带引号的字符串传递):
ls | eval "$@"
但话又说回来,这也与
pass_command sort | uniq
即,您传递命令并在输出上sort
使用。uniq
我认为这种脚本或函数没有实际用途,因为 Unix 的流水线功能似乎涵盖了大多数实际应用。