2015-08-28 515 views
1

我有一個小問題:在SSH命令中加入su -c命令無法在其中運行命令

我想在Crontab中回顯一些帶有反引號的服務器。 繼承人我的樣本命令:

for server in $(cat list); do ssh -t [email protected]$server "su -c \"echo '35 * * * * $script_that_runs ''\'\`/bin/hostname\`''\' $Parameter2 $Parameter3' >> /var/spool/cron/crontabs/root \" "; done 

在REMOTESERVER它顯示了像:

35 * * * * $script_that_runs '$hostname' $Parameter2 $Parameter3 

但我想用那種方式:

35 * * * * $script_that_runs `/bin/hostname` $Parameter2 $Parameter3 

我還沒有找到一個答案。也許我只是愚蠢地找到一個。 有沒有人得到這個解決方案?

問題是:

  • ,如果我的su -c單引號,它不會工作
  • 如果我不是逃避echo命令在實際目錄中的所有文件將中回顯crontab。

命令與最好的結果:

for server in $(echo $servername); do ssh -t [email protected]$server "su -c \"echo '35 * * * * /usr/lib/nagios/plugins/nsca_wrapper \`\`/bin/hostname\`\` apt-check /usr/lib/nagios/plugins/check_apt' >> /var/spool/cron/crontabs/root \" "; done 
+0

我想你需要雙轉義字符,因爲它被評估兩次。一旦進入終端,第二次進入遠程終端。 – Jakuje

+0

似乎不適合我。 (結果:/ bin/hostname已經安裝了/ bin/hostname'(沒有反引號)) – Mamoru

+0

剛剛嘗試過你的代碼,我得到的語法錯誤。你可以提供一個簡單的例子,但不包括循環,變量和內容會工作? – Jakuje

回答

0

您應仔細逃脫

` 

性格像這樣

\\\` 

例用最少的代碼:

$ ssh -t host "su -c \"echo 'something \\\`/bin/hostname\\\`' > /tmp/test \"; cat /tmp/test "; 
something `/bin/hostname` 
+0

我以爲我已經嘗試過了。 NVM。 現在有效。謝謝:-D – Mamoru