非インタラクティブbashシェルでエイリアスを使用しようとしています。エイリアスを~/.bashrc
で定義し、変数BASH_ENV=~/startUpFile
を設定しました。 startUpFileの内容はsource ~/.bashrc
です。
alias
コマンドを実行すると、エイリアスが認識されていることがわかります。ただし、~/.bashrc
で定義されているエイリアスを使用しようとすると、Bashはそれを認識できません。不明なコマンドエラーが表示されます。
TCSHシェルを使用すると、~/.cshrc
ファイルが常に読み取られるため、これを行うのは非常に簡単です。
Bashシェルでこれを行う方法を教えてください。
コマンド shopt -s expand_aliases
は、非対話型シェルでのエイリアス展開を許可します。
.bashrc
はインタラクティブシェルによってのみ処理されます。
また、expand_aliases
Shellオプションがshopt
を使用して設定されていない限り、シェルがインタラクティブでない場合、エイリアスは展開されません。もちろん、POSIXモードは、sh
ではなくbash
という名前でシェルを呼び出すことによって呼び出されます。
多くの場合、エイリアスを使用する人は、プロファイルの最後に.bashrc
を提供するため、非インタラクティブシェルでもエイリアスが存在します。これは最善の方法ではないかもしれませんが、かなり一般的です。
21世紀には、Pythonのような本格的な言語を支持してシェルスクリプトを放棄すべきだと私が考えるようになったのは、このようなことです。それははるかに予測可能です。
必ず
shopt -s expand_aliases
BASH_ENV
でポイントされているファイル内
私は同様の問題を抱えていましたが、結局、必要なのは〜/ .bashrcだけであることがわかりました。
しかし、Ubuntuでは、〜/ .bashrcの処理を停止する行をコメント化する必要がありました。
If not running interactively, don't do anything
[ -z "$PS1" ] && return