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.
この方法が推奨されない理由と従うべき方法このリンクで議論されました。