Strange return value "134" to call Gawk in a Bash script

awk, bash, linux

Solution

Exit code 134 means your program was aborted (received SIGABRT), perhaps as a result of a failed assertion.

(As @hobbs has explained in the comment below, you subtract 128 from the exit code to map to SIGABRT in list.) You may need give the full path of command `log` and full path of `file`.

Here is the signal list by command `kill`:

kill -l

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
 9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGUSR1
17) SIGUSR2     18) SIGCHLD     19) SIGPWR      20) SIGWINCH
21) SIGURG      22) SIGIO       23) SIGSTOP     24) SIGTSTP
25) SIGCONT     26) SIGTTIN     27) SIGTTOU     28) SIGVTALRM
29) SIGPROF     30) SIGXCPU     31) SIGXFSZ     32) SIGWAITING
33) SIGLWP      34) SIGFREEZE   35) SIGTHAW     36) SIGCANCEL
37) SIGLOST     38) SIGXRES     41) SIGRTMIN    42) SIGRTMIN+1
43) SIGRTMIN+2  44) SIGRTMIN+3  45) SIGRTMAX-3  46) SIGRTMAX-2
47) SIGRTMAX-1  48) SIGRTMAX

Problem

I met a very very strange issue when using Gawk in a Bash script. In this script, I use a function to do some text processing. Even a very simple Gawk command will return error 134. ``` #!/bin/bash testFunc() { log "Before gawk: $?" gawk '{print}' file log "After gawk: $?" } ``` If I manually run this script in console, it will work perfectly. `$?` will always be 0 which means success, but if I use this script as a Linux startup script in etc/rc.d/ for level 3, after Gawk is executed, the `$?` is always `134`. What's the meaning of 134? If I replace `gawk '{print}' file` to `gawk --version`, the result is OK. $? is 0.

Original source