我经常在脚本中使用命令的返回/状态值。我很好奇为什么 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
在你的测试中总是返回0
。 0
不是“无返回码”。