【发布时间】:2019-03-26 09:03:57
【问题描述】:
我正在运行这个命令
awk '{print "Removing " ORS $0;system("rm " $0 ORS " if [ $? -eq 0 ]" ORS "then" ORS "echo file " $0 " has been removed." ORS "fi")}' <(cat /tmp/findo)
在 bash 上,该命令有效,但是当从 shell 脚本执行时,它会引发潜在错误
这是示例,您可以查看“第 23 行错误”
# sh -x rvarlog_util.sh
+ findout=/tmp/findout
+ '[' -e /tmp/findout ']'
++ du -sm /var/log
++ awk '{print $1+0}'
+ cdu=2372
++ awk '{print $1+0}'
++ grep total
++ du -m --max-depth=1 -c -m -x /var/log/messages /var/log/messages-20190310 /var/log/messages-20190323-1553338190.gz /var/log/messages-20190324-1553424406.gz /var/log/messages-20190324-1553456095.gz /var/log/messages-20190324-1553456293.gz /var/log/messages-20190324-1553457237.gz /var/log/messages-20190324-1553457268.gz /var/log/maillog-20190324-1553456095.gz /var/log/boot.log /var/log/audit/audit.log /var/log/audit/audit.log-20190311-1552325090.gz /var/log/puppetlabs
+ fusage=2258
rvarlog_util.sh: line 23: syntax error near unexpected token `('
rvarlog_util.sh: line 23: `awk '{print "Removing " ORS $0;system("rm " $0 ORS " if [ $? -eq 0 ]" ORS "then" ORS "echo file " $0 " has been removed." ORS "fi")}' <(cat /tmp/findo)'
【问题讨论】:
-
awk '{print "Removing " ORS $0;system("rm " $0 ORS" if [ $? -eq 0 ]" ORS "then" ORS "回显文件 "$0" 已被删除。 " ORS "fi")}'
-
查看我上面评论中的链接,详细了解如何使上面的代码正确显示。
-
好的,谢谢。让我格式化。
-
问题几乎肯定出在你没有向我们展示的 shell 脚本的前几行,例如缺少的报价。发布重现错误的minimal reproducible example shell 脚本。顺便说一句,使用 shell 调用 awk 调用系统调用 shell 调用 rm 是一个糟糕的主意 - 只需直接从 shell 调用 rm。