[英]Environment variables not loaded when executing command via `ssh` on remote machine
我想編寫一個腳本,在遠程服務器上執行多個命令,其中包括執行一些應用程序。 遠程機器上的.bashrc
文件定義了PATH
變量,以便這些應用程序位於它之下。
但是當我嘗試使用ssh <host> <command>
時,似乎沒有加載.bashrc
。 ssh <host> 'echo $PATH'
只顯示一些路徑,例如/usr/bin
。
更讓我困惑的是,即使ssh <host> "source ~/.bashrc; <command>"
也不起作用。 ssh <host> 'source ~/.bashrc; echo $PATH'
ssh <host> 'source ~/.bashrc; echo $PATH'
仍然只打印了一些路徑。 我通過ssh <host> 'cat ~/.bashrc'
檢查並確認該文件確實包含所有PATH
定義,這在命令執行的環境中沒有受到影響。
於是經過兩個小時的排查,終於找到了問題所在。 這是因為.bashrc
開頭的以下命令。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
這可以防止之后的任何事情在ssh <host> <command>
的環境中執行。
如果您遇到類似問題,請嘗試檢查.bashrc
文件的開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.