[root@my-pc: ]# printf "" | xargs tar czf ./foo.tgz
tar: empty archive
[root@my-pc: ]# echo $?
123
[root@my-pc: ]#
tar手册页仅记录返回代码0
,1
和2
,但进一步说明:
如果由tar调用的子进程以非零退出 退出代码,tar本身也会以该代码退出。这有可能发生 例如,如果使用了压缩选项(例如-z),并且 外部压缩程序失败。另一个例子是rmt失败 备份到远程设备期间。
因此,我假设此返回代码“ 123
”来自某些被调用的子进程。
问题:tar退出代码123总是表示空存档吗? (哪个子进程返回此代码?)
我尝试过的事情:
1)我唯一能想到的就是strace
,但是我对它的经验还不足以判断其输出是否揭示了我的问题的答案。
[root@my-pc: ]# printf "" | xargs strace tar czf ./foo.tgz 2>&1 | grep -w 123
以上是在strace
上运行tar
的正确方法吗?无论如何,该命令都没有输出。
如果相关的话,我可以在不包含最后一个grep
的情况下包含上述内容,但是由于它很长,因此我暂时将其排除在外,而且我不清楚它是否有用
2)进行搜索,我发现最接近的命中是this,但是我不确定是否与此有关(我不清楚find
/ xargs
是否与返回代码“ 123
”)
答案 0 :(得分:3)
来自man xargs
:
EXIT STATUS
xargs exits with the following status:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.
因此,tar
的任何非零退出状态将导致xargs tar
使用状态123
。