【问题标题】:Awk script not working when passed to SSH in a heredoc [duplicate]在heredoc中传递给SSH时,Awk脚本不起作用[重复]
【发布时间】:2019-03-18 23:46:23
【问题描述】:

当我在命令行运行它时,它可以正常工作

awk 'BEGIN{FS=OFS=","}/^AAA/{$3="QQQ"}1' test.txt > newtest.txt

但是,当我尝试在 SSH 连接到远程服务器的 bash 脚本中运行它时,它会因语法错误而失败,但我看不到它失败的地方。看起来它正在指向命令中的 FS。

我正在做以下事情:

sshpass -p "password" ssh user@192.168.0.1 /bin/bash << EOF

  echo password | sudo -u root -S awk 'BEGIN{FS=OFS=","}/^AAA/{$3="QQQ"}1' test.txt  > newtest.txt

EOF

SSH 连接工作正常,但 awk 命令失败。 任何想法如何解决这个问题?

谢谢

【问题讨论】:

  • 顺便说一句,这是一个有趣的命令——你显然不需要 sudo 来打开 newtest.txt (因为打开是在运行 sudo 之前由你的 shell 完成的),所以你所有的'正在升级权限是读取test.txt。但是,如果test.txt 对安全非常敏感,只有 root 才能读取它,那你为什么要将派生自它的东西存储在特权较低的帐户下呢?

标签: bash awk


【解决方案1】:

&lt;&lt;EOF未引用 heredoc 中。在这些内部,执行所有参数扩展,而不管任何内部引用。

如果您希望将$3 传递给awk 而不用替换外壳中该扩展的值,您需要使用引用 heredoc:&lt;&lt;'EOF',而不是@987654325 @。

【讨论】:

  • 谢谢.. 这已经奏效了。
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2012-06-15
  • 2014-03-11
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多