Linux

腳本在本地和通過 ssh 的不同行為

  • November 20, 2019

我在伺服器-A 上有一個腳本

腳本-A

#!/bin/bash -l
echo "script-A.sh" | change-environment.sh

當我 ssh 到伺服器 A 並執行它時,它工作正常。然而,當我

ssh user@server-A ./script-A.sh

Script-A 執行,但在 change-environment.sh 中引發未定義變數錯誤。

change-environment.sh 在 c shell 中執行(我無法控制腳本,所以我使用的方法是我可以使用它的唯一方法),但其他一切都在 bash 中。

在I can run a script local, but cannot do “ssh HOSTNAME /path/to/script.sh”找到了類似的問題 。但是,該問題沒有解決方案,並且已經存在一年了。

將 ssh 與命令一起使用時,即使您的腳本使用#!/bin/bash -l.

嘗試ssh user@server-A bash -l,然後執行您的腳本。您還可以創建類似的東西

   #!/bin/bash
   export 

然後在手動登錄 ( ssh user@server-A) 和通過命令 ( ) 使用 ssh後執行它ssh user@server-A name-of-that-script.sh

例如,在 Mac OS X 上, usingssh martin@nathan bash -l甚至沒有 set PS1,而普通的ssh martin@nathan互動式 shell 會這樣做。

另一個重要區別是偽終端僅在互動執行時分配(無需命令登錄)。

引用自:https://serverfault.com/questions/433570