我有以下命令:
ssh $USER@$HOST "ls /ops/pkg/ec/`grep "PKRTS" /ops/pkg/ec | awk '{print $1}'`* > /tmp/tmp_file"
上面的命令应该做的是,通过 ssh 连接到主机,然后执行命令。该命令应该首先在反引号之间执行 grep 和 awk,并生成一个文件名,然后使用该文件名* 执行 ls 并将该数据写入临时文件。
但是,它甚至在 SSH 之前就执行了 grep 和 awk,并且发送到服务器的命令只是一个命令,"ls /ops/pkg/ec/* > /tmp/tmp_file"
因为 grep 和 awk 在本地机器上没有返回任何内容。
有什么想法可以解决这个问题吗?
答案1
这是引用问题。反引号在双引号内解释,因此您必须将命令括在单引号中。然后您必须执行与 awk 脚本引用相关的更多工作:
ssh $USER@$HOST 'ls /ops/pkg/ec/$( awk "/PKRTS/ {print \$1}" /ops/pkg/ec )* > /tmp/tmp_file'
您可能需要试验反斜杠的数量来保护 awk 命令中的美元符号。
请注意我上面给你的评论:/ops/pkg/ec 是文件还是目录?如果它是一个目录,那么grep "PKRTS" /ops/pkg/ec
可能不是你想要的。