标签: exit-status

How to detect an error using process substitution

This question is similar to the following link, but focused on using the command line (bash shell).

Using a simple example, when doing the following command:

$ cat <(date); echo $?
Fri Jul  7 21:04:38 UTC 2017
0
Run Code Online (Sandbox Code Playgroud)

The exit value is 0 as expected.

In the following command there is an error introduced on purpose, but the return value is still 0:

$ cat <(datE); echo $?
bash: datE: command not found...
Similar command is: 'date'
0
Run Code Online (Sandbox Code Playgroud)

Is …

bash pipe process-substitution exit-status

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

echo $ 是什么意思?做?

在我的终端中,它打印出一个看似随机的数字127。我认为它正在打印一些变量的值并检查我的怀疑,我定义了一个新变量v=4echo $?再次运行给了我0作为输出。

我很困惑,因为我期待 4 是答案。

linux command-line shell exit-status

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

postgres 命令的退出代码 130 是什么意思?

尝试使用该/usr/pgsql-9.2/bin/postgres命令启动 PostgreSQL 服务器时,我得到一个退出值代码130.

但是,我找不到有关此命令退出代码的任何文档。什么130意思?

仅供参考,该命令是从 Java 代码执行的,该代码基本上如下所示:

Process dbProcess = Runtime.getRuntime().exec(cmd);
...
int exitCode = dbProcess.exitValue();
Run Code Online (Sandbox Code Playgroud)

exit postgresql exit-status

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

如何获取find启动的命令的退出代码?

我在 Travis-CI 中使用“查找”来检查程序的特定文件类型。(准确地说,它是一个 shellcheck 检查。)

但是,当使用find由它执行的命令/子shell 的退出代码时,它们自然会被丢弃,因为它们不会传递给“主脚本”。

例如,这是一个查找命令:

find . -type f -iname "*.sh" -exec sh ./testScripts.sh "{}" \;
Run Code Online (Sandbox Code Playgroud)

./testScripts.sh 可能会以 0 或 >= 1 退出,具体取决于测试结果。

testScripts.sh正确使用正确的退出代码,但由于退出find命令的退出代码始终为“0”。我想要的是,如果一个文件/执行错误,这个错误会“传播”到 Travis-CI。

我怎样才能做到这一点?

command-line shell bash find exit-status

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

在 linux 中发出更多命令后,有没有办法获得进程退出状态?

如果我发出了很多命令,并且我想要退出的进程的退出状态,比如 100 个命令前。linux 中是否有结构、文件位置或变量,我可以访问所有退出的进程并查看有关它们的信息?

linux linux-kernel exit-status

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

通过 ssh 执行的 bash 脚本返回不正确的退出代码 0

我正在尝试自动化一个过程,该过程涉及通过 ssh 在各种机器上运行脚本。捕获输出和返回代码(用于检测错误)至关重要。

设置退出代码按预期工作:

~$ ssh host exit 5 && echo OK || echo FAIL
FAIL
Run Code Online (Sandbox Code Playgroud)

但是,如果有 shell 脚本发出不干净的退出信号,ssh 总是返回 0(通过字符串执行模拟的脚本):

~$ ssh host sh -c 'exit 5' && echo OK || echo FAIL
OK
Run Code Online (Sandbox Code Playgroud)

在交互式 shell 中的主机上运行完全相同的脚本工作正常:

~$ sh -c 'exit 5' && echo OK || echo FAIL
FAIL
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么会发生这种情况。如何告诉 ssh 传播 bash 的返回码?我可能不会更改远程脚本。

我使用的是公钥认证,私钥是解锁的——不需要用户交互。所有系统都是 Ubuntu 18.04。应用程序版本是:

  • OpenSSH_7.6p1 Ubuntu-4ubuntu0.1, OpenSSL 1.0.2n 7 Dec 2017
  • GNU bash, Version 4.4.19(1)-release (x86_64-pc-linux-gnu)

注意:这个问题与这些看似相似的问题不同:

shell ssh exit-status

7
推荐指数
2
解决办法
5573
查看次数

尝试启动 MariaDB 时,systemd status=127 for /usr/bin/install

我刚刚将 MariaDB 安装升级到 10.2。
当我现在尝试启动该服务时,它告诉我它失败了,检查状态向我显示了这条相当奇怪的消息:

root@server # systemctl status mariadb
* mariadb.service - MariaDB 10.2.20 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           `-migrated-from-my.cnf-settings.conf
   Active: failed (Result: exit-code) since Wed 2018-12-26 01:54:50 CET; 9min ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 13690 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=127)
 Main PID: 10811 (code=exited, status=0/SUCCESS)
      CPU: 0

Dec 26 01:54:50 server systemd[1]: Starting MariaDB 10.2.20 database server...
Dec 26 01:54:50 server systemd[1]: mariadb.service: Control process exited, …
Run Code Online (Sandbox Code Playgroud)

systemd services mariadb exit-status

7
推荐指数
3
解决办法
7455
查看次数

管道“假”不会给出非零结果代码

我明白这些:

true;   echo "$?"      # 0
false;  echo "$?"      # 1
true  | echo "$?"      # 0
Run Code Online (Sandbox Code Playgroud)

但不是这个:

false | echo "$?"      # 0
Run Code Online (Sandbox Code Playgroud)

...为什么不打印1

我怎么能在管道中强制失败,然后再得到1呢?

bash pipe exit-status

7
推荐指数
2
解决办法
831
查看次数

如何告诉 systemd 在另一个服务干净退出后启动一个服务

我正在尝试启动一个systemd。另一个服务正确退出后的服务(例如:在应用程序中可能是exit(EXIT_SUCCESS) )。

我已经看到在 systemd 的更高版本中可能有一个OnSuccess选项,但我希望能够在没有该选项的情况下执行此操作,因为我的 systemd 版本不支持它。

可以正确地做这样的事情吗?

systemd services exit-status

7
推荐指数
0
解决办法
906
查看次数

是否有与 dash 等效的管道故障?

我有一个 perl 脚本,它运行一个system()调用来执行 shell 命令,我想运行多个命令并在它们之间传输数据。类似于(在 Perl 中):

system("command1 | command2");
Run Code Online (Sandbox Code Playgroud)

Perl 的system()用途/bin/sh,并且由于它们运行在 Ubuntu Server 系统上,因此/bin/shdash. 与许多其他 shell 一样,dash 中管道的退出值是最右侧命令的退出值。这意味着类似的事情将会返回0(成功):

system("false | true")
Run Code Online (Sandbox Code Playgroud)

如果我使用的系统是/bin/shbash我可以通过添加选项轻松修复它pipefail

system("set -o pipefail; false | true");
Run Code Online (Sandbox Code Playgroud)

事实上,这在我本地的 Arch 系统上按预期工作,其/bin/sh要点是bash

$ perl -le '$status = system("false | true"); print $status>>8'
0
$ perl -le '$status = system("set -o pipefail; false | true"); print $status>>8'
1
Run Code Online (Sandbox Code Playgroud)

(是的,我知道这看起来很奇怪,但如果你不了解 …

shell scripting dash exit-status

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