GNU netcat 退出代码总是 1?

Posted

技术标签:

【中文标题】GNU netcat 退出代码总是 1?【英文标题】:GNU netcat exit code always 1? 【发布时间】:2017-12-01 15:50:45 【问题描述】:

我正在尝试在脚本中使用 netcat 的 GNU 变体,但它总是返回退出代码 1,即使一切正常。这是我的案例一步一步:

    运行nc -l 127.0.0.1 -p 7000 运行nc 127.0.0.1 7000 在客户端 nc 上按 ctrl+c 服务器 nc 总是返回 1

这让我无法在 bash 脚本中检测到套接字绑定错误。确切地说,它是来自 Arch linux 的 GNU netcat。使用地址时,用于 Arch 的 BSD netcat 不会因套接字绑定错误而失败,所以它也好不了多少......

【问题讨论】:

似乎客户端终止是服务器失败的一个很好的理由。如果在客户端使用 ctrl+d 会发生什么? 在 GNU netcat 上 - 什么都没有。 【参考方案1】:

看完了 GNU Netcat 源代码,有个坏消息要告诉你……

int c, glob_ret = EXIT_FAILURE;

变量glob_ret 设置为EXIT_FAILURE (1) 并且仅在端口扫描模式或隧道模式下更改。该变量未设置为侦听模式,因此程序将始终以 1 代码退出。

您可以在这里查看 netcat.c 源文件:https://pastebin.com/fh66BPgg (function main)

【讨论】:

以上是关于GNU netcat 退出代码总是 1?的主要内容,如果未能解决你的问题,请参考以下文章

“错误:命令'x86_64-linux-gnu-gcc'失败,退出状态为1”在virtualenv中

如何使用 netcat 只发送一个 UDP 数据包?

从 GNU 并行获取退出状态值

GNU Parallel 面临静默退出和无效选项错误

GNU Parallel面向静默退出和无效选项错误

使用 gnu-find 的退出状态测试文件是不是存在