LinuxMintを使用しています。ログインシェル(cat /etc/passwd | grep myUserName
)はbashです。
グラフィカルデスクトップ環境を起動し、そこからターミナルエミュレーターを実行すると、.bash_profile
がソースされていないことがわかります(export
ed in it is unset)しかし、テキストコンソール( ctrl + alt + F1 )からログインするか、手動で実行した場合ターミナルエミュレータからのbash -l
、.bash_profile
は正常に機能します。
.bash_profile
は、Xの起動時に供給され、すべてのexport
“された変数は、Xから実行されているターミナルで使用可能である必要がありますか?
PSすべてを.bashrc
に配置し、.bash_profile
から調達することはお勧めできません( https://stackoverflow.com/questions/902946/ ):環境関連のものは1回だけ調達する必要があります。
回答
ファイル~/.bash_profile
は、ログインシェルの場合にbashによって読み取られます。これは、テキストモードでログインしたときに得られるものです。
Xでログインすると、起動スクリプトは/bin/sh
によって実行されます。Ubuntuとミント、/bin/sh
はダッシュであり、bashではありません。ダッシュとbashはどちらも同じコア機能を備えていますが、ダッシュはこれらのコア機能は高速で小型にするためですが、bashはより多くのリソースを必要とする代わりに多くの機能を追加します。追加機能を必要としないスクリプトにはダッシュを使用し、インタラクティブな使用にはbashを使用するのが一般的です(ただし zsh より優れた機能がたくさんあります)。
ディスプレイのほとんどの組み合わせmanager(ユーザー名とパスワードを入力するプログラム)とデスクトップ環境は、/etc/X11/Xsession
、ividのログインスクリプトから~/.profile
を読み取ります。 = “0f4601ee03″>
、/etc/gdm/Xsession
または該当する方。したがって、環境変数の定義を~/.profile
に配置します。 dashがサポートする構文のみを使用するようにしてください。
では、どこに何を配置する必要がありますか?
-
適切な
.bash_profile
.profile
をロードし、シェルがインタラクティブな場合は.bashrc
をロードします。. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
-
.profile
に、環境変数の定義と、ulimit
などの他のセッション設定を入力します。 -
.bashrc
に、エイリアス、関数、補完、キーバインディング()、…
ログインシェルと非ログインシェルの違いは?と .bashrcの代替。
コメント
- 単一の回答から学んだ多くのこと: )
- .profileでも' Debian10では機能しません"バスター" 、. bashrcのみks
回答
.bash_profile
は、のスタートアップ構成スクリプトです。バッシュ。 Xにソース.bash_profile
を義務付ける標準はありません。
考えているのはむしろ.profile
です。元々は、bourneシェル(sh)のスタートアップコンフィギュレーションファイルでした。現在、多くのディストリビューションでは、デスクトップ環境がソース.profile
に設定されています。これも標準ではありませんが、慣例のようです。
Debianはグラフィカルログインで.profile
を調達するために使用されていました( 2013年現在のwikiページ)現在はそうではありません( 2016年現在のwikiページ)。
グラフィカルログイン時のアーチソース.xprofile
( 2013年現在のwikiページ)。
Ubuntuは、.profile
( 2013年現在のwikiページ)の使用を推奨していませんでしたが、現在は推奨していません( 2016年現在のwikiページ)。
他の質問について:私の〜/ .bash_profileが機能しないのはなぜですか?それが期待される動作。
簡単に言うと、動作は次のとおりです。
- bashはインタラクティブなログインシェルとして開始されます:読み取り
~/.profile
- bashはインタラクティブな非ログインシェルとして開始されました:読み取り
~/.bashrc
詳細については、 simil askubuntuでの質問: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319
コメント
- これは正しいものもありますが、「常に
~/.bashrc
を読む」は悪いアドバイスです。のみを読む必要があります<インタラクティブシェルからのdivid = "47c28d63fc">
。'ここでの主要な問題を見逃しました。Xでログインすると、bashのログインインスタンスがありません(明らかにAntonioK
s)。
.bashrc
"を読むことへのアドバイスについては、常にインタラクティブシェルを意味していました。その部分を明確にしました。もう誤解を招くものではないことを願っています。.profile
(リンク) " wikiはかつて(ばかげて)それを思いとどまらせました。 'が修正されました。 (/etc/profile
は、/etc/profile.d
にスクリプトを追加することを優先して、システム全体の割り当てには推奨されません。)ユーザーごとの.profile
ファイルは、ユーザーごとの環境変数を設定するための推奨される方法の1つとして表示されるようになりました。"特定のユーザーにのみ影響する環境変数設定に適したファイル(システム全体ではなく)は〜/ .pam_environment と〜/ .profile です。" ~/.profile
を読み取らないと指定しており、~/.xsessionrc
は代わりに使用されます。回答
次の場合にいくつかの問題が発生します。 〜/ .profileファイルをリロード/ソースしようとしています。 [これはUbuntulinuxを指します-コマンドの詳細が異なる場合があります]
- これをターミナルで直接実行していますか、それともスクリプトで実行していますか?
- どうすればよいですかこれをスクリプトで実行しますか?
広告。 1)
これをターミナルで直接実行すると、サブシェルは作成されません。したがって、次の2つのコマンドを使用できます。
source ~/.bash_profile
または
. ~/.bash_profile
どちらの場合もこれにより、.profileファイルの内容で環境が更新されます。
Ad 2)
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幸運を祈ります!
回答
質問では、 https://stackoverflow.com/questions/902946/ は、受け入れられた回答が
- PATH設定を.profileファイルに入れます(他のシェルを使用することがあるため)
- Bashエイリアスと関数をに入れます。 bashrcファイル
次に、これを使用します[編集済み:snip code-comments]:
.bash_profile
:#!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases
すべてを.profile
に入れるLinuxMintでは動作しません。 .bashrc
の使用は問題なく機能しました。
回答
簡単な解決策は、ターミナルログインターミナル。デフォルトプロファイルの「タイルとコマンド」の下にあるGnomeターミナルの場合、「コマンドをログインシェルとして実行する」チェックボックスをオンにすることができます。 この記事では、ログインシェルとそうでないシェルの違いについて説明しています。