标签: exit-code

bash 函数、局部变量和退出代码

在 bash 函数中,我试图捕获命令的输出及其退出代码。一般来说,我的形式是

some_function() {
local rv=$(some_other_function)
local code=$?
echo "$rv"
return $code
}
Run Code Online (Sandbox Code Playgroud)

但我注意到每当我使用“本地”时,然后 $? 总是 0。就像它捕获的是赋值的结果,而不是被调用的函数。如果我不使用“本地”,那么它会按预期工作:

$ foo() { local rv=$(false); echo "code is $?"; }
$ foo
code is 0
$ foo() { rv=$(false); echo "code is $?"; }
$ foo
code is 1
Run Code Online (Sandbox Code Playgroud)

谁可以给我解释一下这个?显然这里有些基本的东西我只是不明白。

variables bash exit-code

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

如何检查命令的退出状态?

我有一个代码片段:

my @array=("abc","def", "ghi");
print "I am testing exit code\n";
grep /lan/, @array;    
if ($?) {
  print "status is 0\n";
 }
else {
  print "Status is 1\n";
}
Run Code Online (Sandbox Code Playgroud)

我在输出中得到“状态为 1”,但我想要“状态为 0”。根据我的理解,在 中@array,找不到“lan”,因此退出状态必须非零,因此应打印“status is 0”。

为什么 Perl 没有给出正确的退出代码?如果我按照上面的理解是错误的,请给出关于退出代码理论的正确想法?

perl exit-code

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

第一次匹配后停止脚本或循环而不使用exit;

不知道怎么问这个问题......问题是如果if ($current[$id][$i]['item'] == '')是真的我需要停止循环运行,所以无论脚本需要做什么或者在这种情况下回声,都不要重复15次.

如果使用exit;整个页面将停止渲染,那么,任何想法?

提前致谢.

如果问题不够清楚,请不要犹豫,请使用评论,我将非常乐意澄清任何疑问.

$i=1; 
while($i<=15) { 
    if ($current[$id][$i]['item'] == '') { 
        echo 'Done!.';
        //do something
    } 
    $a++; 
}
Run Code Online (Sandbox Code Playgroud)

php exit-code exit while-loop

0
推荐指数
1
解决办法
2941
查看次数

C++中Struct的构造函数导致非零退出代码

当我在下面的代码中调用我的SegTree结构的构造函数时,我不断得到一个非零的退出代码.当我注释掉初始化结构的行时,程序运行没有问题.有人可以解释为什么会发生这种情况以及如何修复我的代码吗?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <vector>
#include <string.h>

using namespace std;

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];
    SegTree(int x){ N = x; }
};

int main(){
    SegTree st(len);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请帮助,并提前感谢!

编辑:我的问题不是数组的大小,正如我在评论中提到的那样.我可以创建数组并在将它们放在结构外部时运行代码.

c++ struct exit-code

0
推荐指数
1
解决办法
111
查看次数

为什么退出代码不受尊重?

假设我们在下面写了以下内容test_script.py:

sys.exit(-992340374290374)
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误消息:

"[drive_letter]:\[path to python.exe]" [drive_letter]:/[path to script]

Process finished with exit code -1
Run Code Online (Sandbox Code Playgroud)

-1不是-992340374290374.发生了什么?

python exit-code exit python-3.x

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

为什么输出重定向时测试退出状态不起作用?

我对bash进行了测试,发现了以下代码:

#!/bin/bash

[[ `which pacman` ]] && echo pacman
[[ `which apt-get` ]] && echo apt-get
Run Code Online (Sandbox Code Playgroud)

它将测试安装了什么包管理器并回显它。

在某些系统上,失败的which命令会将错误打印到stderr. 我想抑制which命令的所有输出。

所以我想出了以下代码:

#!/bin/bash

[[ `which pacman >/dev/null 2>&1` ]] && echo pacman
[[ `which apt-get >/dev/null 2>&1` ]] && echo apt-get
Run Code Online (Sandbox Code Playgroud)

但这不会输出任何内容。当我在命令行上运行每个命令时,如下所示:

which pacman >/dev/null 2>&1 && echo $?
Run Code Online (Sandbox Code Playgroud)

在带有 的系统上pacman,它会打印0它应该打印的内容。这&&也证明前面的命令成功了。

那么为什么重定向代码不像在命令行上那样工作呢?我可以在脚本中添加什么以使其正常工作?

这对我来说真的很困惑,因为我以前从未遇到过此类问题。通常,任何在命令行上运行的命令也应该在 bash 脚本中运行,不是吗?

bash exit-code io-redirection

0
推荐指数
1
解决办法
589
查看次数

Bash set -e 没有立即退出管道失败

set -eo pipefail

commandThatFails || exitFunction

exitFunction
Run Code Online (Sandbox Code Playgroud)

所以这个脚本运行 exitMethod 两次......我认为set -e在任何非零退出代码上立即退出并set -o pipefail确保在管道期间任何失败是最终退出状态代码而不是最近的命令?

因此我想:

  1. 命令失败
  2. 执行 exitFunction
  3. set -o pipefail 在第一个命令失败时返回非零退出代码
  4. set -e 检测到非零退出代码并立即退出

在文档中它指出:

如果失败的命令是紧跟在 while 或 until 关键字之后的命令列表的一部分、if 语句中测试的一部分、在 && 或 || 中执行的任何命令的一部分,则 shell 不会退出 列表除了最后一个 && 或 || 之后的命令,管道中除最后一个之外的任何命令,或者如果命令的返回状态正在用 ! 反转。如果除子 shell 之外的复合命令由于命令在 -e 被忽略时失败而返回非零状态,则 shell 不会退出。如果设置了 ERR 上的陷阱,则会在 shell 退出之前执行。

我认为 exitfunction 是command following the final ||so 因此会被计数并立即退出。

我可以通过以下方式解决问题:

commandThatFails || { exitFunction; exit 1; }
Run Code Online (Sandbox Code Playgroud)

但这似乎不是更优雅的处理方式,任何想法都值得赞赏!

bash shell exit-code

0
推荐指数
1
解决办法
36
查看次数

C/C++ 是否有一组标准的退出代码?

AFAIK,退出代码可能会根据应用程序和项目中采用的约定而有所不同。但是,我想知道是否有 C/C++ 项目的退出代码标准列表。

c c++ exit-code exit

0
推荐指数
1
解决办法
457
查看次数

为什么在成功运行Perl脚本后退出代码为1?

当我尝试运行我的Perl脚本时,它会成功执行.后来,当我运行这个命令时echo %errorlevel%,它给出了输出为1.为什么?

perl batch-file exit-code

-1
推荐指数
1
解决办法
1322
查看次数

我们可以延迟编写循环/条件/代码块吗?

嗨,我是golang的新手,

我使用defer来关闭我的结果集.

defer res.Close() 
Run Code Online (Sandbox Code Playgroud)

我想res is nil在打电话之前 检查一下res.Close().

我在函数的末尾有下面的代码块,但是由于某些错误而退出时不会调用它.

if(res!=nil){
            res.Close()
        }
Run Code Online (Sandbox Code Playgroud)

我想知道有什么办法可以实现这个目的defer.

defer  if(res!=nil){
                res.Close()
            }
Run Code Online (Sandbox Code Playgroud)

处理这些情况的惯用方法是什么?

resultset exit-code go

-1
推荐指数
1
解决办法
59
查看次数

在 watch 命令上按 CTRL+C 后运行命令

I\xe2\x80\x99m 在 bash 脚本中运行 watch 命令。我希望脚本在停止 watch 命令 (Ctrl+c) 后运行命令。我在脚本中的 watch 命令之后放置的任何内容都不会执行

\n

bash exit-code watch

-1
推荐指数
1
解决办法
2032
查看次数

如果抛出特定异常,如何使我的 FreePascal 应用程序以特定代码退出?

我的程序有一个ESyntaxError类,我这样使用:

\n\n
raise ESyntaxError.Create(Message)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将该ESyntaxError类定义如下:

\n\n
ESyntaxError = class(Exception)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我观察到,如果ESyntaxError.Create(Message)调用了该代码,我的程序\xe2\x80\x99s 退出代码将设置为1. 但在这种情况下我希望将其设置为65.

\n\n

我尝试这样做:

\n\n
ExitCode := 65;\nraise ESyntaxError.Create(Message);\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但是我的应用程序仍然只是以 退出1,而不是65\xe2\x80\x94 我猜是因为内置Exception类总是重置ExitCode1?(Don\xe2\x80\x99t 确实知道 \xe2\x80\x99 是这种情况,并且在异常文档中没有看到任何明确说明这一点,但我从我在这里观察到的行为推断出这一点)。

\n\n

或者,如果我想让程序具有非1/非0退出状态,我是否应该以其他方式处理这个问题而不是基于它Exception

\n

pascal freepascal exception exit-code

-4
推荐指数
1
解决办法
631
查看次数