我的 中有以下内容.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
in进行更改。.bashrc
sudo su - username -c
答案1
该.bashrc
文件实际上旨在在交互式 shell 中获取 - 为了允许它在非交互环境中获取(例如bash -c
或su -c
没有错误),在文件顶部附近的某个位置添加“交互测试”并不罕见。
例如,Ubuntu 默认.bashrc
文件的开头(从/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
.