我有一个脚本 yummy.sh
#!/bin/bash
alias yumy='yum install -y '
yumprovision() {
yumy
}
当我运行这个脚本时得到了这个
bash: yumy: command not found
为什么它不在函数中加载别名?
答案1
您也可以使用函数yumy
:
#!/bin/bash
yumy() {
yum install -y "$@"
}
yumprovision() {
yumy
}
扩展"$@"
为该函数的参数,因此yumy foo bar
与 相同yum install -y foo bar
。
默认情况下,Bash 不会在非交互式 shell 中扩展别名,但您可以更改它,shopt expand_aliases
如果您真的要看手册中内置的 Shopt。但没有理由这样做,函数在很多方面都更好。
答案2
因为脚本中不能使用别名。别名仅在终端输入时才会“转换”(否则编写脚本会很困难,因为例如您现在不知道如何ls
或会做出反应)。rm
答案3
除了通常仅在交互式 shell 中定义的别名的可见性问题之外,您显然需要使用来eval
执行别名如果别名位于 shell 变量中。
示范
这是一个简单的别名:
$ alias testing='echo this is test'
简单地引用$this
,即使不引用,也不起作用:
$ foo() { local this=testing; $this "$@"; }
$ foo bar
testing: command not found
必须使用以下方法eval
才能完成这项工作:
$ foo() { local this=testing; eval $this '"$@"'; }
$ foo bar
this is test bar
答案4
我相信变量是alias
脚本的一部分。
您始终可以执行以下操作,[但不推荐]
[arif@arif ~]$ yumi='yum install -y'
[arif@arif ~]$ $yumi tmux
Error: This command has to be run under the root user.
为什么不推荐这种方法以及遵循哪种方法在此链接中讨论。