我在启动时在 bash 脚本中使用 S3cmd。如果它返回错误代码,则脚本已准备好执行某些操作。但是,当发生错误时,s3cmd 似乎(有时)会破坏它,并在屏幕上输出信息。它只是存在我的脚本。
如何防止程序破坏我的 Bash 脚本?如果出现问题,我只希望 bash 脚本继续执行下一步操作。
编辑:似乎这只发生在/etc/rc.local。如果我将脚本作为其他东西(/home/whateverscript)运行,它会按照我的意愿运行。
也许你可以把你的
s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/"
在如下脚本中,
outputText=$(s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/" 2>&1;echo ,$?)
这会将您的 stderr 重定向到 stdout ( 2>&1
) 并且变量outputText将包含您想要的命令输出(格式为 *stdout,exit_status*),如果稍后在脚本上下文中需要它的话。
如果您不想要 stdout 而只想要outputText中命令的状态,则可以使用以下命令
status=$(s3cmd sync --recursive --delete-removed --config="$HEMMAPPEN/.s3cfg" "$SOURCEFOLDER" "$TARGETFOLDER/" > /dev/null 2>&1;echo $?)
status变量将包含已运行的命令的状态。
我希望这是有道理的。请评论,如果它还没有解决你的问题。