私の中には次のものがあります.bash_profile
。
echo bash_profile
if [ -f $HOME/.bashrc ]; then
echo Sourcing bashrc
source $HOME/.bashrc
echo Sourced bashrc
fi
私の.bashrc
ファイルはかなり長いですが、最後にecho Path set
宣言といくつかのエクスポートがあります。
実行すると、sudo su - username
次の結果が表示されます。
bash_profile
Sourcing bashrc
Path set
Sourced bashrc
ただし、実行すると、sudo su - username -c ''
次のような結果が表示されます。
bash_profile
Sourcing bashrc
Sourced bashrc
source
コマンドでこの-c
フラグを無効にしたのはなぜですか?実行コマンドを使用するときにPATH
変更を適用する必要があります。.bashrc
sudo su - username -c
答え1
このファイルは実際に対話型シェルからインポートするためのものです。非対話型環境(たとえば、エラーなし).bashrc
からインポートできるようにするには、ファイルの上部付近に「対話型テスト」を追加するのが一般的です。 。bash -c
su -c
たとえば、.bashrc
Ubuntuのデフォルトファイル(/etc/skel
アカウント作成からコピーされたもの)の先頭は次のようになります。
$ head /etc/skel/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
だからおそらくあなたの.bashrc
はい正常に獲得しました。しかし、到着する前に修正してくださいPATH
。