%20%E5%91%BD%E4%BB%A4%E7%9A%84%E6%8C%87%E5%AE%9A%E8%A1%8C%E4%B8%BA%EF%BC%9F%20.png)
我像这样从 awk 调用 sleep 命令:system("sleep 15m")
并发现当我用 CTRL-C 中断它时,它只会中断 sleep 命令,而不是脚本。所以我尝试按照建议将系统函数包装在 if 语句中在此示例脚本中并进一步解释这里。然后它看起来像if (system("sleep 15m") != 0) exit 1
。
这不起作用,所以我尝试了print system("sleep 3")
,它总是返回 0,这与规定的行为相反。如果我让它运行,那么在 shell 中输入sleep 3
then会产生 0,如果我中断它,会产生 130。echo $?
那么我错过了什么?我多次检查了拼写错误,尝试了 --posix 和 --traditional 开关,并研究了用户指南,但没有任何改变。
$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
Copyright (C) 1989, 1991-2015 Free Software Foundation.
答案1
似乎是一个傻瓜错误
$ echo foo | gawk '{print system("sleep 3")}'
^C0
$
似乎与当 AWK 调用并用 ^C 中断时,使 bash 退出 != 0
gawk 解决方法,由 Keith 提供
$ echo foo | awk '{if(system("sleep 3 && exit 42")==42){print "completed"}else{print "interrupted"}}'
completed
$ echo foo | awk '{if(system("sleep 3 && exit 42")==42){print "completed"}else{print "interrupted"}}'
^Cinterrupted
$
nawk 正确处理它
$ echo foo | nawk '{print system("sleep 3")}'
^C0.0078125
$