当前位置: 首页 > 知识库问答 >
问题:

我的美元?命令成功代码失败,为什么?

东郭兴学
2023-03-14

在我的bash脚本中,如果在放弃之前失去了与目标的连接,我将尝试让rsync重试10次。

我知道这段代码会捕获所有错误,但我现在可以接受。

我的代码是:

lops="0"
while true; do
    let "lops++"
    rsync $OPT $SRCLINUX $TRG 2>&1 | tee --append ${LOGFILE}
    if [ "$?" -eq "0" ]; then
        echolog "rsync finished WITHOUT error after $lops times"
        break 
    else
        echolog "Re-starting rsync for the ${lops}th time due to ERRORS"
    fi
    if [[ "$lops" == "10" ]]; then
        echolog "GAVE UP DUE TO TOO MANY rsync ERRORS - BACKUP NOT FINISHED"
        break 
    fi
done

它没有按预期工作,下面是第一个错误发生的情况:

TDBG6/
rsync: connection unexpectedly closed (131505 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
rsync finished WITHOUT error after 1 times

这是因为美元吗?包含T形三通的返回值,而不是rsync?

我怎样才能解决这个问题?(我个人Linux语法有限:)

共有3个答案

宋伟泽
2023-03-14

我认为状态是管道中最后一个命令的状态。

一般来说,我不知道如何处理这个问题,但对于这种特定情况,您可以重定向整个循环的输出:

while true; do
    ...
done | tee -a "$LOGFILE"

根据它的用途,这也可能意味着你不需要“回声”功能

娄振
2023-03-14

除了其他关于处理混淆退出代码的管道的建议外,您还可以通过使用如下流程替换来避免管道:

rsync "$OPT" "$SRCLINUX" "$TRG" &> >( tee --append "${LOGFILE}" )

这将重定向stdoutstderr(这是

葛宪
2023-03-14

我认为至少有两种可能解决您的问题:

>

  • 使用管道状态:

    一个数组变量,包含最近执行的前台管道中进程的退出状态值列表(可能只包含一个命令)。

    将其用作:

    rsync $OPT $SRCLINUX $TRG 2>&1 | tee --append ${LOGFILE}
    if (( PIPESTATUS[0] == 0 )); then
    

    使用rsync--log-file选项。

    笔记:

    • 您的代码中缺少很多引号

  •  类似资料:
    • 我试图解决Dijkstra算法上的一个hackerrank问题--https://www.hackerrank.com/challenges/dijkstrashortreach。我在使用我自己的Dijkstra代码逻辑。虽然我的代码解决了更容易的测试用例,但它在更高的测试用例上失败了。我猜我的代码在某个地方缺少了一些传递性,并且我得到的某个节点的值高于预期。你能帮我找出我的错误吗?问题:输入格式

    • 我正在为Phonegap开发设置一个环境,我遇到了一些麻烦,最终构建和运行适用于Android的应用程序。 当我尝试执行Android构建时,出现以下错误: 一些细节: 我在 Windows 8.1 上运行; 我使用的是Android SDK 22; 我已经为 JDK、Android(工具、构建工具和平台工具)、Ant 和 Gradle 创建了环境变量。 任何想法为什么我会收到此错误? 谢谢。

    • 问题内容: 嗨,我是一名初学者应用程序开发人员,我选择了phonegap,请在将android作为我的项目平台添加时查看问题。代码如下: 更新:谢谢,我认为它向前移动了一点,但现在它显示了这一点: 问题答案: 请在您的PATH变量中添加 C:\ Windows \ System32

    • 我是科尔多瓦的新手,所以如果我的问题不相关,请原谅我。我的Windows7x64机器中有一个cordova项目。昨天,我通过构建了我的cordova应用程序。但是我需要添加新的插件来更新我的cordova项目。我做了什么来添加这个插件到我的cordova应用程序; null 构建失败C:\android\sdk\tools\ant\BUILD.xml:720:执行这一行时发生以下错误:C:\and

    • 问题内容: 我是科尔多瓦的新手,所以如果我的问题不相关,请原谅我。我在Windows 7 x64计算机上有一个cordova项目。昨天,我通过构建了Cordova应用。但是我需要添加新的插件来更新我的cordova项目。我将该插件添加到我的cordova应用程序中所做的工作; 我在win7 x64 env上安装了git应用程序。 我在cmd上写了这个命令。 我打开Windows环境变量/路径窗口并

    • 问题内容: 科尔多瓦构建失败,错误代码:EACCESS 已将android平台添加到 尝试重新安装,但无法正常工作 问题答案: 由于某种原因,build当前不是可执行文件。要解决此问题,请打开终端并输入以下命令: