我在 Linux 中执行以下 awk 命令时收到一个奇怪的错误

我在 Linux 中执行以下 awk 命令时收到一个奇怪的错误
`awk '{print "ssh -q " $1 " \"echo && hostname && df -h | grep /usr\";"}' essentials`

它应该连接到文件“essentials”中的一组主机名并回显它们的磁盘空间使用情况。如果我删除反引号,您可以看到正在执行的内容:

ssh -q hostname1 "echo && hostname && df -h | grep /usr";
ssh -q hostname2 "echo && hostname && df -h | grep /usr";
ssh -q hostname3 "echo && hostname && df -h | grep /usr";

实际产量:

-bash-3.2$ `awk '{print "ssh -q " $1 " \"echo && hostname && df -h | grep /usr\";"}' essentials`
bash: echo && hostname && df -h | grep /usr: No such file or directory

hostname2
/dev/xvda3             23G   13G  9.2G  59% /usr

hostname3
/dev/xvda3             23G  1.5G   21G   7% /usr

知道为什么第一个命令不起作用吗?

答案1

这是因为echo && hostname && df -h | grep /usr它被视为单个命令,所以请使用以下命令:

`awk '{print "ssh -q " $1 " bash -c \"echo && hostname && df -h | grep /usr\";"}' essentials`

答案2

xargs --arg-file essentials -I {} ssh -q \{\} bash -c "echo && hostname && df -h | grep /usr"

相关内容