将组合命令作为参数传递

将组合命令作为参数传递

考虑一个脚本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 的流水线功能似乎涵盖了大多数实际应用。

相关内容