为什么 Finger 没有非零返回值?

为什么 Finger 没有非零返回值?

我经常在脚本中使用命令的返回/状态值。我很好奇为什么 Finger 命令没有返回值。

例如,

$ finger kevin
Login: klang                 Name: Kevin Kang
etc...                       Shell: /bin/bash
No mail.
No Plan.

$ echo $?
0

$ finger blabla
finger: blabla: no such user.

$ echo $?
0

在 Ubuntu 和 RH 下测试。我想我可以做一些字符串处理并寻找“没有这样的用户”响应,但这似乎很麻烦。

手册页没有列出任何返回值。


是的,它的返回值为零,但如果这是仅有的它的价值——我没有意识到我必须把它拼出来。

答案1

finger不认为未找到的情况值得使用非零返回代码。

然而,也存在真实的错误情况,例如:

$ finger -x
finger: invalid option -- 'x'
usage: finger [-lmps] [login ...]
$ echo $?
1

通过修改其源代码来改变finger行为是微不足道的,但这样做可能不是为了破坏期望 Finger 永远不会失败的脚本。

finger如果您需要坚持.. ,恐怕您必须继续进行后处理手指输出才能实现您的目标。

或者,您可以使用getent它提供有用的返回值:

$ getent passwd root
root:x:0:0:root:/root:/bin/bash
$ echo $?
0
$ getent passwd foo
$ echo $?
2

答案2

手指不是POSIX 指定的,因此实现可以随意处理返回码。看来大多数 Linux 发行版都复制了该软件包的 BSD 版本。

对于Ubuntu来说,https://launchpad.net/ubuntu/+source/bsd-finger导致包含 .bz2 源代码的 .bz2 存档finger.c。该代码仅显示两个返回非零值的地方:

  • 如果您输入无效选项(如jlliagre已经指出)。

  • 如果 calloc 例程无法找到相当于整数的可用内存(在 userlist 函数中)——不太可能

否则,主函数无条件返回零。

答案3

它确实有一个返回码。你不能不是有返回码。只是finger在你的测试中总是返回00不是“无返回码”。

相关内容