使用 `sudo su - username -c` 时无法从 .bash_profile 获取 .bashrc

使用 `sudo su - username -c` 时无法从 .bash_profile 获取 .bashrc

我的 中有以下内容.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标志?我需要在使用 执行命令时对PATHin进行更改。.bashrcsudo su - username -c

答案1

.bashrc文件实际上旨在在交互式 shell 中获取 - 为了允许它在非交互环境中获取(例如bash -csu -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.

相关内容