
次の設定は私の設定です/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
その後シェルによって上書きされます。