'〜/ .bash_profileが機能しないのはなぜですか?

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

コメント

。'ここでの主要な問題を見逃しました。Xでログインすると、bashのログインインスタンスがありません(明らかにAntonioK

s)。

  • フィードバックをありがとうございます。私はあなたの苦情を解決するのに十分なほど私の答えを更新したことを願っています。 "常に.bashrc "を読むことへのアドバイスについては、常にインタラクティブシェルを意味していました。その部分を明確にしました。もう誤解を招くものではないことを願っています。
  • " Ubuntuは、.profileリンク " wikiはかつて(ばかげて)それを思いとどまらせました。 'が修正されました。 (/etc/profileは、/etc/profile.dにスクリプトを追加することを優先して、システム全体の割り当てには推奨されません。)ユーザーごとの.profileファイルは、ユーザーごとの環境変数を設定するための推奨される方法の1つとして表示されるようになりました。"特定のユーザーにのみ影響する環境変数設定に適したファイル(システム全体ではなく)は〜/ .pam_environment 〜/ .profile です。"
  • Debianに関するリンクされたページでは、Debianはグラフィカルログインのために~/.profile読み取らないと指定しており、~/.xsessionrcは代わりに使用されます。
  • 気づいてくれてありがとう。 wikiページが更新されました。回答時のバージョンにリンクしました。
  • 回答

    次の場合にいくつかの問題が発生します。 〜/ .profileファイルをリロード/ソースしようとしています。 [これはUbuntulinuxを指します-コマンドの詳細が異なる場合があります]

    1. これをターミナルで直接実行していますか、それともスクリプトで実行していますか?
    2. どうすればよいですかこれをスクリプトで実行しますか?

    広告。 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ターミナルの場合、「コマンドをログインシェルとして実行する」チェックボックスをオンにすることができます。 この記事では、ログインシェルとそうでないシェルの違いについて説明しています。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です