関数にエイリアスを使用しますか?

関数にエイリアスを使用しますか?

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は非対話型シェルのエイリアスを拡張しませんが、shopt expand_aliases次の場合に変更できます。本物見たいマニュアルに組み込まれたShopt。しかし、これを行う理由はありません。機能は多くの点で優れています。

答え2

エイリアスはスクリプトで使用できないためです。エイリアスはターミナルに入力したときにのみ「変換」されます(そうしないと、ls今やどのように反応するのかわからないため、スクリプトが困難になる可能性があります)。rm

答え3

一般に、対話型シェルでのみ定義されるエイリアスの可視性の問題に加えて、次のようにevalエイリアスを実行する必要があります。エイリアスがシェル変数にある場合

デモ

以下は簡単なエイリアスです。

$ 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.

この方法が推奨されない理由と従うべき方法このリンクで議論されました。

関連情報