![使用 `sudo su - username -c` 时无法从 .bash_profile 获取 .bashrc](https://linux22.com/image/13547/%E4%BD%BF%E7%94%A8%20%60sudo%20su%20-%20username%20-c%60%20%E6%97%B6%E6%97%A0%E6%B3%95%E4%BB%8E%20.bash_profile%20%E8%8E%B7%E5%8F%96%20.bashrc.png)
我的 中有以下内容.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
.