大家好,
我正在尝试通过 SSH 运行 for 循环。该循环用于获取在服务器上拥有帐户的每个用户的最后一次登录,
ssh 172.20.2.1 '''for i in `cat /etc/passwd | awk -F: '{print $1}'`; do last -n 1 $i | sed -e '/^$/{N;d;}'; done'''
我收到错误,
bash: -c: line 1: syntax error: unexpected end of file
-bash: d: command not found
-bash: }; done: command not found
我用谷歌搜索但没有得到太多信息。
任何援助将不胜感激。
答案1
该错误是因为您正在使用'''
引用您的命令。由于您还使用 single'
来引用您的awk
andsed
命令,因此 shell 认为命令已经结束并感到困惑。据我所知,不存在这样的事情'''
;前两个'
被忽略,因为它们只是定义了一个空字符串,最后一个被视为开始引号,它由awk
.如果您查看问题中代码的突出显示方式,您就可以看到这一点。
最简单的解决方案是使用单引号将命令括起来,并使用双引号将 和 括sed
起来awk
。但是,您随后需要转义脚本$1
中的awk
,以便它不会被解释为 shell 变量。你也无缘无故地把事情复杂化了。您真正需要的是:
ssh localhost 'cut -d: -f1 /etc/passwd |
while read i; do last -n 1 $i | sed -e "/^$/{N;d;}"; done'