代码之家  ›  专栏  ›  技术社区  ›  Sandra Schlichting

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

  •  -1
  • Sandra Schlichting  · 技术社区  · 6 年前

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

    如果我打电话 system("exit 2") 从awk,那么bash脚本仍然退出 0 .

    问题

    我怎么能得到 $code 从awk到bash脚本?

    #!/usr/bin/bash
    
    # ...
    
    awk '{
      # ...
      code=2
      # ...
    }' /proc/loadavg
    
    exit $code
    
    3 回复  |  直到 6 年前
        1
  •  5
  •   Kent    6 年前

    下面是一个shell脚本示例:

    awk -v code="2" 'BEGIN{exit code}'
    shell_code=$?
    echo $shell_code #just for seeing the code
    exit $shell_code
    

    上面的shell脚本将退出2,awk变量中的值 code

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

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

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

        2
  •  2
  •   karakfa    6 年前
    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
    
        3
  •  2
  •   James Brown    6 年前
    $ cat foo.sh
    #!/bin/bash
    
    exit $(awk 'END{code=2; exit code}' file)
    $ bash foo.sh
    $ echo $?
    2