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