在 bash 脚本中运行别名会给我"<arguments>:找不到命令"



我有一个别名为_test的脚本。它工作正常,但在打印输出之前,它会执行<arguments>: command not found。例如,_test -h给出line 49: -h: command not found

这是一个最小的例子:

alias _test='
echo Hi
'
shopt -s expand_aliases
_test -h

编辑:对于那些询问使用函数的人,事实上,我曾经使用过一个函数——但它开始导致递归问题。我只是想要一个类似于宏的东西——就像文本被插入到脚本中一样。

编辑2:我刚刚意识到为什么我的函数/别名一直有递归。我修复了它,然后切换回一个函数,但这个问题可能会帮助其他人。

删除换行符。正如所写的,_test -h扩展到这个,在回波的上方和下方都有一行空白:


echo Hi
-h

将其设为单行别名:

alias _test='echo Hi'

不过,一般情况下应避免使用别名。它们实际上是为了在交互式shell中提供方便。在脚本中,甚至在交互式shell中,最好使用函数。例如:

_test() {
echo Hi "$@"
}

对于那些询问使用函数的人,事实上,我曾经使用过一个函数,但它开始导致递归问题。我只是想要一个类似于宏的东西——就像文本被插入到脚本中一样。

您是否试图包装现有命令,如下图所示?

alias ls='ls --color=auto -F'

如果是这样,您可以使用command来防止函数递归地调用自己。等效功能为:

ls() {
command ls --color=auto -F "$@"
}

command ls调用ls命令,而不是我们刚刚定义的ls函数,这样我们就不会陷入无限递归循环。

感谢Kugelman的回答,我能够用解决它

alias _test='
echo Hi
true'
shopt -s expand_aliases
_test -h

相关内容

  • 没有找到相关文章

最新更新