tar退出代码123是否总是意味着空存档?

时间:2019-01-03 03:39:12

标签: linux tar return-code

[root@my-pc: ]# printf "" | xargs tar czf ./foo.tgz
tar: empty archive
[root@my-pc: ]# echo $?
123
[root@my-pc: ]# 

tar手册页仅记录返回代码012,但进一步说明:

  

如果由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”)

1 个答案:

答案 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