Unix SCP 命令是否继续复制文件,尽管响应代码 > 0

Unix SCP 命令是否继续复制文件,尽管响应代码 > 0

在这种情况下,scp 命令返回响应代码 > 0,但文件已成功复制并最终加载到数据库中,这意味着它们没有损坏。

尽管响应代码 > 0,Unix SCP 命令是否继续复制文件?如果 resp > 0,文件是否会损坏或根本不传输?我预计 resp > 0 意味着复制已停止,没有复制任何文件。

使用的代码:

scp -r [!.]* [email protected]:/home/user/DATA_* /app/data
if (($? > 0)); then touch conn_error_172_0_0_1.bad; fi

根据本手册,响应代码 > 0 是错误http://support.microfocus.com/kb/doc.php?id=7021696

答案1

Unix SCP 命令是否继续复制文件,尽管响应代码 > 0

这个问题没有意义——它scp返回该代码,并且只有在完成它所做的任何事情后才会返回。因此,当您获得返回代码时,scp就完成了。之后什么也没有发生。没有 scp 可以继续做任何事情!

是否scp能够复制任何文件、所有文件或仅复制某些文件,这取决于错误(以及错误发生的时间点)。

如果您需要原子副本,请使用rsync选项--delay-updates而不是scp

答案2

各州的文件scp

成功时实用scp程序退出 0,如果发生错误则退出 >0。

这不是特别精确,所以我们需要尝试一个实验:

scp remoteHost:/etc/no_such_file /tmp; echo SS=$?    # "SS=1"
scp remoteHost:/etc/hosts /tmp; echo SS=$?           # "SS=0"
scp no_such_host:/etc/hosts /tmp; echo SS=$?         # "SS=255"

现在让我们看一个组合:

scp remoteHost:/etc/no_such_file remoteHost:/etc/hosts /tmp; echo SS=$?    # "SS=1"

这里请注意,虽然退出状态不为零,但文件/etc/hosts已成功复制。我想这就是您的情况,其中一些文件被复制,而另一些则没有。

无论是否使用-O(强制scp协议而不是新的默认协议),每种情况的退出状态都是相同的。sftp

我得出的结论只是文档的结论,如果退出状态非零,则会发生某种错误,如果退出状态为零,则任何传输都不会发生错误。

相关内容