在bash脚本中使用gawk时遇到了一个非常奇怪的问题。
在这个脚本中,我使用一个函数来做一些文本处理。即使是非常简单的gawk命令也会返回错误134
#!/bin/bash
testFunc()
{
log "Before gawk: $?"
gawk '{print}' file
log "After gawk: $?"
}
如果我在控制台中手动运行此脚本,它将完美运行,$?
将始终为0表示成功,但如果我将此脚本用作etc / rc.d / for level 3中的Linux启动脚本执行gawk后,$?
始终为134
,我不知道134的含义是什么。
如果我将gawk '{print}' file
替换为gawk --version
,结果还可以,$?是0。
答案 0 :(得分:21)
退出代码134表示您的程序已中止(收到SIGABRT),可能是由于断言失败。
(正如@hobbs在下面的评论中解释的那样,你从退出代码中减去128以映射到列表中的SIGABRT。)
您可能需要提供命令log
的完整路径和file
这是sigal 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
答案 1 :(得分:0)
C ++代码中的一种情况是当代码引发未处理的异常时。例如:
if (someval > 10) {
throw runtime_error("number too large");
}
在执行并遇到这种情况时,包含此代码的二进制文件至少在我的情况下将获得退出状态134:OS = Centos。