在函数中使用别名?

在函数中使用别名?

我有一个脚本 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.

为什么不推荐这种方法以及遵循哪种方法在此链接中讨论。

相关内容