在2个ssh会话中无法在awk脚本中转义$ 0。适用于1个ssh会话

时间:2013-04-09 01:26:37

标签: bash ssh awk escaping

我无法让脚本运行。

以下脚本完美运行(在SSH会话中使用awk):

ssh root@DB01 "cat /tmp/$togo  \
|openssl aes-256-cbc -d -salt -pass pass:aaaaaaaaaaaaa \
|gunzip \
|gawk -v envbucket='design.test.bucket' -v prodbucket='design.bucket' '{gsub(prodbucket,envbucket);print \$0}' \
|gawk -v envbucket='data.test.bucket' -v prodbucket='data.bucket' '{gsub(prodbucket,envbucket);print \$0}' \
| mysql -u root -p'secret' appdb"

但是当我尝试在ssh会话中的ssh会话中运行完全相同的东西时,它会失败:

ssh root@intermediateserver "ssh root@DB02 \"cat /tmp/$togo  \
|openssl aes-256-cbc -d -salt -pass pass:aaaaaaaaaaaaa \
|gunzip \
|gawk -v envbucket='design.test.bucket' -v prodbucket='design.bucket' '{gsub(prodbucket,envbucket);print \$0}' \
|gawk -v envbucket='data.test.bucket' -v prodbucket='data.bucket' '{gsub(prodbucket,envbucket);print \$0}' \
| mysql -u root -p'secret' appdb\""

如果我删除2个gawk命令并将gunzip输出直接导入mysql,则此脚本有效。但是在管道中使用gawk命令时,输出变为空。

我认为它与打印$ 0有关,而不是在双引号内的双引号内正确转义。

我已经坚持了一段时间,所以我希望有人可以提供帮助。

P.S。我知道与这些脚本相关的安全风险。在目前的形式中,它们只是在测试环境中运行。

0 个答案:

没有答案