シェルの問題:エイリアスは展開されません
質問
次のような問題があります。
MKS Toolkit を使用して現在実行されているテストスクリプトがたくさんあります。 mingwシェル(MSYS)を使用してそれらのスクリプトを実行することができましたが、alias
esを利用する他のスクリプトもあります。それは内蔵のMKSツールキットであり、Bashではなくてもありません。
問題は、スクリプトを使用して自動的でなく、それらのスクリプトを変更したいという問題です。つまり、それらのエイリアスを定義して使用する必要があります。MSYSシェルの「/ etc / profile」ファイルにエイリアスを定義しましたが、成功せずにまた、shopt -s expand_aliases
( "/ etc / profile")を使用しようとしましたが、それはどちらも機能しません。
誰かがこれがどのように行われるかについてのアイデアを共有できます。既存のスクリプトが同じままである必要があることに注意してください。
あらゆる考えやアイデアは大歓迎です。
ありがとう
解決 2
この答えにその解決策を与えました。
を実行する前に変数BASH_ENV
の定義を含みます。
bash script_name.sh
.
bash_envはシェルの環境を設定するスクリプトを指します。マイケースでは、alias
esをエクスポートするため、およびスクリプトが必要な機能もこのようになります。
shopt -s expand_aliases
alias my_alias="echo my_alias"
function MyFunction {
echo "MyFunction(DUMB):" $*
}
export -f MyFunction
. 他のヒント
/etc/profile
はログインシェルにのみ供給されます。スクリプト内のエイリアスを必要としている場合は、それらを別のファイルに入れて、それらを必要とするスクリプトにそれらをソース化する必要があります。例えば:
aliases.sh :
alias walrus="echo coo coo cah joo"
.
script.sh :
#!/bin/bash
shopt -s expand_aliases
. aliases.sh
walrus
.
、その後
$ ./script.sh
coo coo cah joo
.
それはおそらくそれをするための最も合理的な方法です。でスクリプトを変更しないと主張した場合は、次のように間接的に実行することができます。
.
bash --rcfile aliases.sh -i script.sh
は、Interactiveシェルを実行するようにBashに伝えます(したがって、script.shを実行する前にエイリアスとエイリアススクリプトを展開する)。