簡體   English   中英

在遠程機器上通過 `ssh` 執行命令時未加載環境變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM