通过 ssh 运行 for 循环

通过 ssh 运行 for 循环

大家好,

我正在尝试通过 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'来引用您的awkandsed命令,因此 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'

相关内容