sudoはPS1を保持しません

sudoはPS1を保持しません

次の設定は私の設定です/etc/sudoers

Defaults    !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS EDITOR DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

私のsudo su端末がPS1システムのデフォルトに変更されると、私の.bashrc PS1設定は無視されます。 ing時に環境変数が失われないように、この問題をどのように解決できますかsudo su

奇妙です。輸出中ですが、EDITOR何らかの理由でPS1強制的に輸出されない場合があります。

sudo -V保持する変数を実行すると、削除するPS1変数にはリストされません。

答え1

を使用しないでくださいsudo su。これは侮辱的または役に立たない使用ですsu。正しい値はですsudo -s

環境変数を保存するにはsudo -Es


状況がまだ変更されている場合は、$PS1そのタスクを実行するスクリプトがあります。sudo -Es $SHELL -x出力を実行して読み取ると、場所がわかります。

答え2

1〜2年前、Unixシステムシェルの作成者とパッケージマネージャは通常、次のことが最善であることに同意しました。いいえ export PS1(さまざまなシェル間の大きな構文の違いと他のシェルのプロンプトを提供するときの一部のシェルの「爆発的な」動作のため)私たちは皆、初期化をインタラクティブなシェル起動ファイルPS1(例:~/.mkshrcなど~/.kshrc)に移動することに同意しました。~/.bashrc

免責事項:私はmksh開発者です。

答え3

$ENV通常、シェルを呼び出すときにシェルのソースファイルを明示的に設定できます。たとえば、次のような幸運があります。

sudo ENV=/home/$USER/.bashrc su

失敗した場合は、次のことを試すこともできます。

sudo su -c "exec </dev/tty ENV="~/.bashrc" bash -i"

答え4

PS1おそらく、シェルの起動時に初期化されたのでしょう。つまり、値は実際にはシェルによって保持されますが、sudoその後シェルによって上書きされます。

関連情報