Linux
bash 腳本中的絕對路徑
我有一個
myscript.sh
呼叫命令的 shell 腳本,比如說mycmd
. 當我從終端執行該腳本時,例如./myscript.sh
,一切正常。但是當我將該腳本添加到 crontab 時,輸出
mycmd
為空。當我/usr/local/bin/mycmd
在裡面打電話時,myscript.sh
一切都恢復正常了。那麼為什麼我必須使用執行檔的絕對路徑呢?是不是因為它不在
$PATH
“cron-bash”中?
你說得對——
cron
可能有一個PATH
不包括的環境/usr/local/bin/
。您可以通過在腳本中將該目錄附加到PATH
:PATH="$PATH:/usr/local/bin/"
但是,最佳實踐確實是對腳本呼叫的所有外部二進製文件使用顯式路徑,以防萬一(例如)方便呼叫的惡意設計程序
cp
被放入PATH
之前的某個地方/bin
。