在没有 运行 命令的 SSH 命令中使用 su -c 反引号
Backticks with su -c in SSH Command without running command in it
我有一个小问题:
我想在几个服务器的 Crontab 中用反引号回显一些东西。
这是我的示例命令:
for server in $( cat list ); do ssh -t $user@$server "su -c \"echo '35 * * * * $script_that_runs ''\'\`/bin/hostname\`''\' $Parameter2 $Parameter3' >> /var/spool/cron/crontabs/root \" "; done
在远程服务器上它显示为:
35 * * * * $script_that_runs '$hostname' $Parameter2 $Parameter3
但我想要这样:
35 * * * * $script_that_runs `/bin/hostname` $Parameter2 $Parameter3
我还没有找到答案。也许我只是为了愚蠢的 atm 找到一个。
有人对此有解决方案吗?
问题是:
- 如果 i 运行 su -c 带单引号,它将不起作用
- 如果我不转义 echo 命令,实际目录中的每个文件都将在 crontab 中回显。
最佳结果命令:
for server in $( echo $servername ); do ssh -t $user@$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
你应该双重转义
`
这样的角色
\\`
代码最少的示例:
$ ssh -t host "su -c \"echo 'something \\`/bin/hostname\\`' > /tmp/test \"; cat /tmp/test ";
something `/bin/hostname`
我有一个小问题:
我想在几个服务器的 Crontab 中用反引号回显一些东西。 这是我的示例命令:
for server in $( cat list ); do ssh -t $user@$server "su -c \"echo '35 * * * * $script_that_runs ''\'\`/bin/hostname\`''\' $Parameter2 $Parameter3' >> /var/spool/cron/crontabs/root \" "; done
在远程服务器上它显示为:
35 * * * * $script_that_runs '$hostname' $Parameter2 $Parameter3
但我想要这样:
35 * * * * $script_that_runs `/bin/hostname` $Parameter2 $Parameter3
我还没有找到答案。也许我只是为了愚蠢的 atm 找到一个。 有人对此有解决方案吗?
问题是:
- 如果 i 运行 su -c 带单引号,它将不起作用
- 如果我不转义 echo 命令,实际目录中的每个文件都将在 crontab 中回显。
最佳结果命令:
for server in $( echo $servername ); do ssh -t $user@$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
你应该双重转义
`
这样的角色
\\`
代码最少的示例:
$ ssh -t host "su -c \"echo 'something \\`/bin/hostname\\`' > /tmp/test \"; cat /tmp/test ";
something `/bin/hostname`