web-dev-qa-db-ja.com

.profileでエイリアスを設定できないのはなぜですか?

私はこれを私の.profileの最後の行として持っています:

alias gl="cd /home/jrenner/glances/glances"

まだリブートした後でもglを入力するとコマンドが見つかりません。何が起こっている?正しいユーザーとしてログインしています。

8
talloaktrees

Lpanebrのアイデアはうまくいくと確信していますが、ここではよりエレガントなソリューションを紹介します。 .bashrcでそのエイリアスコマンドを実行します。そうするか、エイリアス専用のファイルを追加することを好む人もいます。 .aliasまたは何でも呼び出して、.alias.bashrcに追加します

@lpanelbrのような書式設定ができるといいのですが。ウィキはあるのでしょうか?

4
Jason

.profileファイルに入れたときにエイリアスが常に機能しない理由は2つあります。 1つ目は、.profile(または.bash_profile)ファイルがログインシェルに対してのみ実行されることです。 Xの下のターミナルウィンドウでbashを起動している場合、ターミナルエミュレーター(たとえばgnome-termanl)はおそらくログインシェルとしてbashを実行していません。 [必要に応じてこれを変更するオプションがほとんどありますが、デフォルト(gnome-termalの場合)はログインシェルとして実行しないことです。]
シェルはインタラクティブなシェルになるため、.bashrcが実行されます。

ただし、通常、bashはXセッションの開始時にログインシェルとして実行されています。 .profileにエイリアスコマンドがある場合、それらはPATHなどの環境変数の設定とともに実行されます。ターミナルウィンドウが開くと、bashの新しいインスタンスが実行され、プロンプトが表示され、そのターミナルでコマンドが実行されます。窓。環境変数とは異なり、エイリアスはbashの1つのインスタンスから、bashによって開始された新しいインスタンスにエクスポートできません。そのため、エイリアスは新しいシェルに渡されません。

これを確認するには、次の実験を試してください。

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

.bashrcは、ログインシェルとして起動されたときにbashによって実行されないことに注意してください。そのため、.bashrc.profileから供給されない限り、エイリアスをそこに配置しても常に機能するとは限りません。これは非常に一般的な方法です。

5
Tony McGregor

シェルインタープリターとしてbash(echo $Shell)を使用している場合、独自のCD関数を定義するのが最善(または唯一の方法)だと思います。

.bashrcファイルを編集し、最後に次を追加します。

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

次のように拡張することもできます。

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

サブディレクトリに直接変更し、その内容をリストします。

0
lpanebr
$ bash #start a new bash instance

これは私のサーバーの問題でした。シンプルsource .profileは何らかの理由で機能しませんでした

0