Bash使用
使用 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
標誌?我需要在執行命令時對PATH
in進行更改。.bashrc``sudo su - username -c
該
.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
.