![我在 Linux 中执行以下 awk 命令时收到一个奇怪的错误](https://linux22.com/image/1248695/%E6%88%91%E5%9C%A8%20Linux%20%E4%B8%AD%E6%89%A7%E8%A1%8C%E4%BB%A5%E4%B8%8B%20awk%20%E5%91%BD%E4%BB%A4%E6%97%B6%E6%94%B6%E5%88%B0%E4%B8%80%E4%B8%AA%E5%A5%87%E6%80%AA%E7%9A%84%E9%94%99%E8%AF%AF.png)
`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"