Bash

如何在遠端機器上執行本地腳本並包含參數?

  • April 9, 2020

我編寫了一個在本地執行時執行良好的腳本:

./sysMole -time Aug 18 18

參數**"-time"“Aug”“18”“18”**已成功傳遞給腳本。

現在,此腳本設計為在遠端機器上執行,但從本地機器上的本地目錄執行。例子:

ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole

這也很好用。但是當我嘗試包含上述參數時出現問題**(-time Aug 18 18)**,例如:

ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole -time Aug 18 18

執行該腳本後,我收到以下錯誤:

bash: cannot set terminal process group (-1): Invalid argument
bash: no job control in this shell

請告訴我我做錯了什麼,這非常令人沮喪。

你的例子非常接近。當您將它與諸如此類的參數一起使用時,它工作得很好。

範例腳本:

$ more ex.bash 
#!/bin/bash

echo $1 $2

有效的例子:

$ ssh serverA "bash -s" < ./ex.bash "hi" "bye"
hi bye

但是對於這些類型的論點它失敗了:

$ ssh serverA "bash -s" < ./ex.bash "--time" "bye"
bash: --: invalid option
...

這是怎麼回事?

您遇到的問題是參數 ,-time--time在我的範例中,被解釋為切換到bash -s. bash您可以通過使用該參數來終止它為自己獲取任何剩餘的命令行參數來安撫它--

像這樣:

$ ssh root@remoteServer "bash -s" -- < /var/www/html/ops1/sysMole -time Aug 18 18

例子

#1:

$ ssh serverA "bash -s" -- < ./ex.bash "-time" "bye"
-time bye

#2:

$ ssh serverA "bash -s" -- < ./ex.bash "--time" "bye"
--time bye

#3:

$ ssh serverA "bash -s" -- < ./ex.bash --time "bye"
--time bye

#4:

$ ssh  < ./ex.bash serverA "bash -s -- --time bye"
--time bye

**注意:只是為了清楚地表明重定向出現在命令行上的任何位置都沒有區別,因為ssh無論如何呼叫遠端shell及其參數的串聯,引用並沒有太大區別,除非您需要在遠端shell上引用就像例子#4:

$ ssh  < ./ex.bash serverA "bash -s -- '<--time bye>' '<end>'"
<--time bye> <end>

引用自:https://unix.stackexchange.com/questions/87405