Bash

使用 sudo su - username -c 時無法從 .bash_profile 獲取 .bashrc

  • January 21, 2020

我有以下內容.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進行更改。.bashrc``sudo su - username -c

.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.

引用自:https://unix.stackexchange.com/questions/563122