对同一参数运行两个命令

对同一参数运行两个命令

我可能想给一个命令起一个别名,以便该命令像往常一样运行,但在执行之前还对参数执行其他操作。一个例子可能是:

alias ls="echo displaying contents of $@; ls $@"

只是一个假设,但本质上我想运行一个命令(在本例中为 ls )并在标准ls发生之前设置一个静态命令集来运行它。

像这样的函数:

function ls() {
echo "printing $1"
ls $1
}

似乎不合适,因为我必须处理相关命令上使用的开关/选项,即重新创建整个命令。

附言。我想使用原始命令的通常使用方式,只需使用别名或 rc 之类的东西以上述方式添加功能(即我可以永久附加的东西)

答案1

您可以使用"$@"将所有函数参数按原样传递给实际命令:

$ verbose_ls() { echo "running ls with args '$@'"; \ls "$@"; }
$ alias ls=verbose_ls
$ ls -l -a /
running ls with args '-l -a /'
...

注意函数中的\前面的反斜杠。ls这将防止bash扩展ls别名,因为您想要调用/bin/ls,而不是递归定义的别名。

如果您实际上想访问函数中的特定参数,同时仍然保留将任意选项切换传递给实际命令的能力,那么您可能无法避免在函数本身中实现某种参数解析逻辑。

答案2

不能使用别名来完成:http://mywiki.wooledge.org/BashFAQ/080

答案3

您可以使用 :

ls() {
     echo "printing ${1}"
     command ls "${1}"
}

相关内容