54

非対話型のbashシェルでエイリアスを使用しようとしています。でエイリアスを定義し~/.bashrc、変数を設定しましたBASH_ENV=~/startUpFile。startUpFileの内容はsource ~/.bashrcです。

コマンドを実行すると、エイリアスが認識されていることがわかりますalias。ただし、で定義されたエイリアスを使用しようとすると~/.bashrc、Bashはそれを認識できません。不明なコマンドエラーが発生します。

TCSHシェルを使用すると、~/.cshrcファイルが常に読み取られるため、これを行うのは非常に簡単です。

Bashシェルでこれを行う方法はありますか?

4

4 に答える 4

55

このコマンドshopt -s expand_aliasesは、非対話型シェルでのエイリアス拡張を許可します。

于 2009-10-23T21:24:21.960 に答える
15

.bashrcインタラクティブシェルによってのみ処理されます。

さらに、expand_aliasesシェルオプションがを使用して設定されていない限り、シェルが対話型でない場合、エイリアスは展開されませんshopt。もちろん、POSIXモードが、のsh代わりに名前を付けてシェルを呼び出すことによって呼び出されない限りbash

エイリアスを頻繁に使用する人.bashrcは、プロファイルの最後でエイリアスを入手することが多いため、非対話型シェルでもエイリアスが存在します。これは最善の方法ではないかもしれませんが、かなり一般的です。

このようなことから、21世紀にはシェルスクリプトを放棄して、Pythonのような本格的な言語を採用する必要があると私は信じています。それははるかに予測可能です。

于 2009-10-23T21:18:26.090 に答える
12

必ず

shopt -s expand_aliases

あなたので指しているファイルでBASH_ENV

于 2009-10-23T21:12:14.247 に答える
3

同様の問題が発生しましたが、最終的には、〜/.bashrcだけで十分であることがわかりました。

ただし、Ubuntuでは、〜/ .bashrcの処理を停止する行にコメントする必要がありました:

If not running interactively, don't do anything
[ -z "$PS1" ] && return
于 2010-11-13T17:21:41.293 に答える