天天看點

shell腳本裡切換使用者執行指令的注意事項

功能說明:用root使用者執行一個腳本,腳本裡需要切換到普通使用者DT去執行其他指令,其中就用到了EOF,用法如下:

#!/bin/bash
su - DT<<EOF
cd apache-tomcat-./bin
sh startup.sh
EOF
           

當時以為su - DT就跟在交換界面執行一樣會把環境也切換過去,是以在分界符EOF裡用的是相對路徑,結果一運作就報錯:

-bash: line : cd: apache-tomcat-/bin: 沒有那個檔案或目錄
           

然後就做了個測試,腳本如下:

#!/bin/bash
echo "`pwd`"
su - DT<<EOF
echo "`pwd`"
EOF
           

結果如下:

[root@localhost ~]# sh test.sh 
/root
/root
           

從這裡可以看出來su - DT<<隻是把使用者切過去了但環境變量還是root,是以在EOF分界符裡的語句都得用絕對路徑。