私はLinux Mintを使用しています。私のログインシェル(cat /etc/passwd | grep myUserName
)はbashです。
.bash_profile
グラフィックスデスクトップ環境を起動してターミナルエミュレータを実行した後、ソースがないことがわかります(編集された環境変数がexport
設定されていない場所)。ただし、ctrlテキストコンソール(++)からログインするか、ターミナルエミュレータで手動で実行するとalt正常に動作します。F1bash -l
.bash_profile
.bash_profile
Xが起動したときにインポートする必要があり、すべてのexport
変数が端末で利用可能でXで実行されるべきだと思うのは間違っていますか?
PSはすべてを入れて.bashrc
ソースを提供します。.bash_profile
これは良い考えではありません。:環境用品は一度だけ購入してください。
答え1
bashがログインシェルの場合、~/.bash_profile
bashはこのファイルを読み取ります。テキストモードでログインすると表示される内容です。
Xからログインすると、起動スクリプトは/bin/sh
.UbuntuとMintで構成さ/bin/sh
れます。スプリント、強く打つ代わりに。 Dashとbashは両方とも同じコア機能を持っていますが、dashは高速で小さいためコア機能に固執しますが、bashはより多くのリソースを必要とする代わりに多くの機能を追加します。一般的に、ダッシュはアドインを必要としないスクリプトに使用され、bashは対話型の使用に使用されます(もちろん扱いにくい より良い機能がたくさんあります。)。
ディスプレイマネージャ(ユーザー名とパスワードを入力するプログラム)とデスクトップ環境のほとんどの組み合わせは~/.profile
、または該当する場合のログインスクリプトから読み込みます。したがって、環境変数定義をに入れます。ダッシュサポート構文のみを使用してください。/etc/X11/Xsession
/usr/bin/lightdm-session
/etc/gdm/Xsession
~/.profile
それでは、どこに何を入れるべきですか?
ロードが良好で、シェルが対話
.bash_profile
型の場合に.profile
ロードされます。.bashrc
. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
に
.profile
環境変数の定義やその他のセッション設定(例)を配置しますulimit
。- では、エイリアス、関数、完成、キーバインディング(にはなし)
.bashrc
などのbashインタラクション設定を配置します。.inputrc
また、見ることができますログインシェルと非ログインシェルの違いは何ですか?そして.bashrcの代替。
答え2
.bash_profile
Bashの起動設定スクリプトです。.bash_profile
Xのソースを規定する標準はありません。
あなたが考えるのは.profile
。もともとBourne Shell(sh)の起動設定ファイルでした。今日、多くのディストリビューションはデスクトップ環境をソースコードに設定します.profile
。これも標準ではありませんが慣例のようです。
Debian はソースコードを使って.profile
グラフィカルログインでソースコードを取得します (2013年現在のWikiページ)今ではない(2016年現在のWikiページ)。
アーチソース.xprofile
(2013年現在のWikiページ)。
Ubuntuは.profile
(2013年現在のWikiページ)これ以上もう苦しくありません(2016年現在のWikiページ)。
他の質問について:私の~/.bash_profileがうまくいかないのはなぜですか?これは予想される動作です。
簡単に言えば、動作は次のようになります。
- bashは対話型ログインシェルで始まりました。読む
~/.profile
- インタラクティブな非ログインシェルでbashを起動する:読む
~/.bashrc
詳細については、askubuntuの同様の質問に対する私の答えをご覧ください。https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319
答え3
/source ~/.profile ファイルを再読み込みしようとすると、いくつかの問題が発生します。 [Ubuntu linuxを意味し、場合によってはコマンドの詳細が異なる場合があります。]
- 端末で直接実行しますか、それともスクリプトで実行しますか?
- これをスクリプトでどのように実行しますか?
開示する。 1)
端末で直接実行すると、サブシェルは生成されません。したがって、次の2つのコマンドのいずれかを使用できます。
source ~/.bash_profile
または
. ~/.bash_profile
どちらの場合も、.profile ファイルの内容で環境を更新します。
広告2)次のコマンドを呼び出してbashスクリプトを起動できます
sh myscript.sh
または
. myscript.sh
最初のケースでは、システムの環境変数に影響を与えずにサブシェルプロセスにのみ表示されるサブシェルが作成されます。サブシェルコマンドが完了した後、エクスポートなどは適用されません。これは、多くの開発者が多くの時間を無駄にする一般的な間違いです。
スクリプトに加えた変更をグローバル環境に適用するには、次のようにスクリプトを実行する必要があります。
.myscript.sh
注文する。
スクリプトがサブシェルで実行されないようにするには、この機能を使用できます。 (再び例としてUbuntuシェルを使用)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
これが一般的な誤解を解決することを願っています! :D 頑張って!
答え4
簡単な解決策は、端末をログイン端末にすることです。 Gnome端末の場合は、デフォルトのプロファイル「タイルとコマンド」の下にある「コマンドをログインシェルとして実行」ボックスを選択できます。これこの記事では、ログインシェルと非ログインシェルの違いについて説明します。