2011-02-09 126 views
0

我有一個bash腳本,它使用ssh遠程執行命令。 我取決於我是否在背景或無法啓動命令看準行爲但是相當大的區別:ssh遠程執行命令,如何確定PATH?

ssh host cmd1 && cmd2 && cmd3 

ssh host "cmd1 && cmd2 && cmd3" & 

在第二種情況下,不執行某些命令正確,因爲他們不不會出現在$ PATH上。看起來這兩種情況的環境是不同的(當傳遞env作爲命令時,我注意到了相當大的差異)。

如何解釋?

我知道我可以重寫PATH變量,但有沒有辦法更好地做到這一點,以優雅的方式讓第二個例子像「&」功能一樣行爲?

回答

6

在第一個命令中,您可能在本地主機上執行cmd2和cmd3,而不是在遠程主機上執行。 &&單詞由本地shell解釋,不作爲參數傳遞給ssh。

1

PATH被設置在編譯sshd

[~]> grep PATH /etc/sshd_config   
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin 

而執行的遠程命令始終使用絕對路徑。