Linux 是否可以让awk退出带有“exit 2”的bash脚本?

Linux 是否可以让awk退出带有“exit 2”的bash脚本?,linux,bash,awk,Linux,Bash,Awk,根据awk脚本中的某些条件,我需要从awk脚本中获取退出代码并将其传递给bash脚本,这样它就可以退出,例如退出2 如果我从awk调用systemexit 2,那么bash脚本仍然以0退出 问题: 你知道如何从awk到bash脚本中获取$code的值吗 #!/usr/bin/bash # ... awk '{ # ... code=2 # ... }' /proc/loadavg exit $code 下面是一个示例shell脚本: awk -v code="2" 'BEGI

根据awk脚本中的某些条件,我需要从awk脚本中获取退出代码并将其传递给bash脚本,这样它就可以退出,例如退出2

如果我从awk调用systemexit 2,那么bash脚本仍然以0退出

问题:

你知道如何从awk到bash脚本中获取$code的值吗

#!/usr/bin/bash

# ...

awk '{
  # ...
  code=2
  # ...
}' /proc/loadavg

exit $code

下面是一个示例shell脚本:

awk -v code="2" 'BEGIN{exit code}'
shell_code=$?
echo $shell_code #just for seeing the code
exit $shell_code
上面的shell脚本将退出2,即awk变量代码中的值

awk one liner也可以与输入文件一起使用,例如:

awk 'BEGIN{code=2} {if (something happens) exit code}' file

然而,我认为您可以让awk输出一些值,而不是退出一个值。然后将此awk输出分配给shell变量。您可以在shell脚本中决定是否要使用哪个值退出shell脚本,直到awk输出。

在awk脚本中使用exit 2。需要明确的是,exit语句不仅仅是exit。exit语句应按照它们在程序源中发生的顺序调用所有结束操作,然后在不读取进一步输入的情况下终止程序。结束操作中的exit语句应终止程序,而无需进一步执行结束操作。如果在exit语句中指定了表达式,则其数值应为awk的exit状态,除非遇到后续错误或使用表达式执行后续exit语句。
awk '{
       # ...
       # default value of code will be 0, no need to declare...
       # if something went wrong set
       code=2
       # if you need to terminate, uncomment next line
       # exit
       # otherwise processing will continue
       # ensure you don't overwrite code
     }
 END {exit code}
' /proc/loadavg
$ cat foo.sh
#!/bin/bash

exit $(awk 'END{code=2; exit code}' file)
$ bash foo.sh
$ echo $?
2