标签: exit-code

如果 HTTP 状态代码不是 200,我是否可以使 cURL 失败并且退出代码不同于 0?

我一直假设当 curl 收到 HTTP 500 响应时,它会返回一个退出代码,这意味着失败 (!= 0),但事实并非如此。

如果 HTTP 状态代码不是 200,有没有一种方法可以使 cURL 失败,并且退出代码不同于 0?我知道我可以使用,-w "%{http_code}"但这将它放在 STDOUT 中,而不是作为退出代码(此外,我也对捕获输出感兴趣,我不想重定向到文件,而是重定向到屏幕)。

curl stdout http-status-code-500 exit-code

389
推荐指数
7
解决办法
19万
查看次数

让 ROBOCOPY 返回“正确的”退出代码?

是否可以要求 ROBOCOPY 以指示成功或失败的退出代码退出?

我正在使用 ROBOCOPY 作为我的 TeamCity 构建配置的一部分,并且不得不添加一个步骤来使 ROBOCOPY 的退出代码静音对我来说似乎很愚蠢。

基本上,我已经添加了这个:

EXIT /B 0
Run Code Online (Sandbox Code Playgroud)

到正在运行的脚本。

然而,这当然掩盖了 ROBOCOPY 会返回的任何实际问题。

基本上,我希望成功的退出代码为 0,失败的退出代码为非零,而不是 ROBOCOPY 现在返回的位掩码。

或者,如果我不能这样做,是否有一个简单的批处理命令序列可以将 ROBOCOPY 的位掩码转换为类似的值?

robocopy exit-code

139
推荐指数
7
解决办法
11万
查看次数

当端口转发失败时,我可以使 SSH 失败吗?

如果我执行远程端口转发,-R 3690:localhost:3690当远程主机上的端口上已经存在绑定时,我会收到以下警告:

Warning: remote port forwarding failed for listen port 3690
Run Code Online (Sandbox Code Playgroud)

有没有办法让 ssh 失败(即以非零返回码退出),而不仅仅是发出警告?

ssh port-forwarding exit-code

47
推荐指数
1
解决办法
2万
查看次数

当任务返回的结果与 0 不同时如何使 TaskScheduler 失败

我有一个备份任务失败,结果非零,但任务计划程序说它正确执行了任务。

有没有办法告诉任务计划程序任务失败?

backup windows-7 task-scheduler exit-code

19
推荐指数
2
解决办法
1万
查看次数

如何退出nano的错误代码?

当使用 vim 来“回复”某个程序(通常是 git)时,故意退出错误会很有,以中止打开窗口的整个操作。喜欢

$ git commit -a
# vim opens, showing me the staged files and asking for a commit message
# oops, I see some stuff staged that wasn't supposed to be committed
:cq     # exit vim with nonzero exit code
Run Code Online (Sandbox Code Playgroud)

这将阻止git实际执行提交。

现在不幸的是,有些机器已经nano配置为默认编辑器,所以我偶尔会发现自己在那个编辑器中,相应地很无助。

我现在所做的是:使用另一个ssh会话和killall editor.

有没有办法从 nano 本身内部做同样的事情,对应于 vim 的:cq

nano exit-code

10
推荐指数
1
解决办法
1197
查看次数

在 su -m $USER -c "<cmd>" 之外访问退出代码

下面的命令根据失败与否正确打印“0”或“1”,因为我把 $? 在“su”命令中。

sudo su -m $USER -c "./shutdown.sh &> /dev/null; echo \$?"
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

sudo su -m $USER -c "$BASE/bin/shutdown.sh &> /dev/null"; echo $?
Run Code Online (Sandbox Code Playgroud)

它将始终打印“0”,因为即使命令部分失败,实际的“su”也将始终成功。

知道如何检索子外壳的退出代码吗?

linux shell su exit-code

9
推荐指数
2
解决办法
7382
查看次数

你如何一起使用 PIPESTATUS、tee 和 /bin/sh?

当我跑

curl | tee test.txt; echo ${PIPESTATUS[0]}
Run Code Online (Sandbox Code Playgroud)

我正确地看到

curl:尝试“curl --help”或“curl --manual”以获取更多信息

2

但是当我尝试使用“/bin/sh”运行完全相同的命令时:

sh -c "curl | tee test.txt; echo \${PIPESTATUS[0]}"
Run Code Online (Sandbox Code Playgroud)

我得到

curl:尝试“curl --help”或“curl --manual”以获取更多信息

sh: 1: 替换错误

Bad substitution请问我们如何解决问题?

linux bash pipe exit-code

8
推荐指数
2
解决办法
6558
查看次数

使用命令的输出作为退出代码

对于我的持续集成脚本,我想检查 git 分支是否与 master 分支不同步。因此我使用

git rev-list --left-right --count master...my-branch-name
Run Code Online (Sandbox Code Playgroud)

它会返回…… 喜欢

1    3
Run Code Online (Sandbox Code Playgroud)

(3次提交在master之前,1次在后面)

添加| cut -f1只会给我第一个数字(在主人后面提交)。

现在我想用那个数字退出脚本,因为后面的 0 个提交是成功的,所有其他的都应该给出一个错误。

我怎样才能做到这一点?我试过

exit 'git rev-list --left-right --count master...my-branch-name | cut -f1'
Run Code Online (Sandbox Code Playgroud)

但这会引起

/bin/bash: line 66: exit: git rev-list --left-right --count master...my-branch-name | cut -f1:需要数字参数

是否有最佳实践?

bash git exit-code

6
推荐指数
1
解决办法
481
查看次数

在 bash 脚本中,如何检查是否设置了“-e”?

set -e经常在脚本中使用,但有时,脚本在某些命令中失败是可以的。
我尝试检查是否set -e打开,但找不到方法 - 没有选项(我知道)set可以提供当前值。
也尝试过这样的: set | grep errexiterrexit是选项名称-e)和set | grep "-e",没有运气。
我想检查是否errexit设置了该选项,以便我可以在我随着时间的推移构建的一些库函数中暂时禁用它(如果需要,可以使用set +e和重新应用set -e)。就像是:

if [ errexit is set ]; then
   ERR_EXIT=1
   set +e
fi
...
run some code that may fail
...
if [ "${ERR_EXIT}" = 1 ]; then
    set -e
fi
Run Code Online (Sandbox Code Playgroud)

bash exit-code

5
推荐指数
1
解决办法
407
查看次数

退出代码128,是什么原因?

根据定义,退出代码 128 表示“无效的退出参数”。但是我总是得到 255(退出状态超出范围),以防参数像浮点数一样无效。

这是我的 linux 发行版上的专有实现吗?

# exit 1.234
exit
bash: exit: 1.234: numeric argument required

$ echo $?
255   //this should be 128?

# exit -1
exit

$ echo $?
255   //this is okay
Run Code Online (Sandbox Code Playgroud)

linux bash exit exit-code

4
推荐指数
1
解决办法
2万
查看次数