シェルを呼び出すときにgnome-terminalがPATHを変更するかどうか

シェルを呼び出すときにgnome-terminalがPATHを変更するかどうか

PATHgnome-terminalがシェルを呼び出すときに環境変数を変更した可能性があります。特には$HOME/.local/bin:$HOME/bin常にに追加されますPATH

私はこれを証明するために次のような実験をしました。

  • GNOME端末を開く
  • 編集 - >基本設定 - >プロフィールに行き、現在のプロフィールを「編集」します(私は「名前なし」でした)。
  • [コマンド]タブで、[マイシェルの代わりにカスタムコマンドを実行]を選択し、次の入力領域を入力しますsh。これにより、ログインシェルではなくbash-wayモードで呼び出す必要があります。sh
  • /etc/profile、、を取得できないように、一時$HOME/.bash_profile$HOME/.bashrcにそのファイルの名前を変更します。 (実際にはnon-loginを呼び出しているので、このファイルをインポートしないでくださいsh。)
  • 次に、新しいgnomeターミナルウィンドウを開き、echo $PATH次を実行します。

    /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/naitree/.local/bin:/home/naitree/bin
    

最後の2つのパスがPATH

これらの事実に基づいて、次のような説明が可能だと思います。

  1. PATHこの場合、親プロセスから継承されますgnome-terminal-server
  2. PATHある時点で神秘的に起動されたスクリプトで修正されました。sh
  3. PATHgnome-terminal-serverが子プロセスをフォークするときに修正されます。

今私は可能性#1と#2を排除したと思います。

  1. cat /proc/$PPID/environPID$PPIDは、gnome-terminal-serverそのPATH変数/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbinに私たちが探しているものが含まれていないことを示します。
  2. sh開いて実行したばかりのプロセスでは、export -n PATHこのsh -x新しいinitプロセスにはどのソースも表示されませんsh。そしてそれはPATHきれいです:

    /usr/local/bin:/usr/bin
    

今、最後の可能性が残っています。

私は何を逃したことがありませんか?不思議な修正に対してgnome-terminalは責任がありますかPATH


修正する:

sh -xカスタムコマンドで試しました。ゴンメターミナルを開けた後は何も見えません。しかしecho $PATHそう言い、$HOME/.local/binそこ$HOME/binにありなさい。

以下は、リリースに関する情報です。

  • Fedora 23(4.4.8-300.fc23.x86_64)
  • bash バージョン 4.3.42(1)-リリース(x86_64-redhat-linux-gnu)

アップデート2:

今試してみました。

  • echo "$PATH"最初に追加されました~/.bashrc
  • bashを使用してデフォルトの非ログインシェルモードでgnome-terminalを開き、カスタムコマンドを使用しますbash -x

デバッグ出力に基づいて、これが~/.bashrcスクリプトソースの開始点であることを確認しました。しかし、$HOME/.local/binとは$HOME/binそれ以前にも存在していましたPATH

ベストアンサー1

PATH最初に端末を/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

~/.bashrcいつも疑わしい項目をすべて確認した後、、、、~/.bash_profileで設定を変更してみました。しかし、私は結局まだそこにいます。/etc/bashrc/etc/profileDefaultEnvironment/etc/systemd/system.conf/etc/systemd/user.conf/usr/local/...PATH

pam_env偶然への言及が見つかりました。だから、次の行を追加しました/etc/security/pam_env.conf

PATH DEFAULT=/bin:/sbin

再度ログインした後、ターミナルシェルは迷惑なPATHローカルパスを削除しました。

pam_envsystemd設定を変更した後、PID 1またはプロセスの両方がsystemd --user環境にローカルパスがないため、デフォルトは次のものであると確信していますgnome-terminal-server

最新のLinuxは構成の悪夢となっています。

私はこれがOPの質問に対する答えではないことを知っています。しかし、言及する価値は十分なようです。

おすすめ記事