为什么名为 sl (stream locomotive)的程序总是以退出状态“1”结束?
sl
动画 sl 正在运行......
$ echo $?
1
为什么退出状态不是零?
能给我解释一下吗?我正在运行它tmux
。
为什么名为 sl (stream locomotive)的程序总是以退出状态“1”结束?
sl
动画 sl 正在运行......
$ echo $?
1
为什么退出状态不是零?
能给我解释一下吗?我正在运行它tmux
。
$?
在一个项目中,我有一个测试设置,我可以在其中读取命令的退出状态。
在我的测试中,我想确保foobar
输出中不存在该字符串。
当我运行命令时:
./program | grep foobar
返回1
,表示失败。
我需要它返回0
。
有没有办法取消返回值?
我有以下 bash 代码来捕获构建结果,同时将输出打印到屏幕并提供构建结果的解析。
output=$(unbuffer cmake ... | tee /dev/tty)
parseErrors ${output}
parseErrors 听起来像。它解析任何看起来像错误的输出。我可以在那里退出,但宁愿在函数调用之后退出。如何从传递给 unbuffer 命令的 cmake 构建中获取返回状态?我曾尝试使用 PIPESTATUS[0],但我认为这是从 unbuffer 本身返回值。
我的 systemctl 代码不起作用
● <appname>.service
Loaded: loaded (/etc/systemd/system/<appname>.service; disabled; vendor prese
Active: failed (Result: exit-code) since Mon 2022-04-04 21:55:20 CEST; 4s ago
Process: 1686 ExecStart=/usr/bin/npm start (code=exited, status=203/EXEC)
Main PID: 1686 (code=exited, status=203/EXEC)
Apr 04 21:55:20 raspberrypi systemd[1]: <appname>.service: Service RestartSec=50
Apr 04 21:55:20 raspberrypi systemd[1]: <appname>.service: Scheduled restart job
Apr 04 21:55:20 raspberrypi systemd[1]: Stopped <appname>.service.
Apr 04 21:55:20 raspberrypi systemd[1]: <appname>.service: Start request repeate
Apr 04 21:55:20 raspberrypi systemd[1]: <appname>.service: Failed with result 'e
Apr 04 21:55:20 raspberrypi systemd[1]: Failed to start <Appname>.service.
systemctl reset-failed <appname>
systemctl start <appname>
^^不要工作
任何人都可以帮忙吗?
设想:
$ cat t0.txt
xxx
$ grep xxx t0.txt > t0.txt
grep: t0.txt: input file is also the output
# exit status 2
$ cat t0.txt
<nothing>
问题:如果输入文件也是输出并且存在状态是2
(发生错误),那么为什么要清除输入文件?
我正在尝试使用命名管道,以便我可以保留stdout
长时间过程的状态输出。我可以stderr
用于状态输出,但我想保留它以防出错。这是一个例子:
#!/bin/bash
pipe=$(mktemp -u)
mkfifo $pipe
dd if=/dev/zero of=$pipe bs=1M count=1024 status=progress & cat $pipe > test.bin
# ¿¿¿ Status of dd command ???
rm $pipe
该命令并不完全是我想要做的,但说明了使用命名管道将一个进程的输出馈送到另一个进程的输入的组合。在我的应用程序中,dd
替换为一些长时间运行的命令,并cat
替换为ssh
. 这会做我想要的,但我不知道如何获取dd
命令的状态,因为它$?
会返回命令的状态cat
。如果这是一个管道,我可以使用PIPESTATUS
,但这似乎不适用于并行进程。在实际应用中,任何一个(或两个)命令都可能失败。
有没有办法让进程的状态并行运行?有没有比命名管道更好的方法来完成这个任务?
该命令patch -R -p0 -s -f --dry-run < abc.patch
失败,退出代码为 1,并从 patch 命令打印一条错误消息,但在 if 条件下与否定一起使用时,它通过(即打印 Pass),下面是代码
if ! patch -R -p0 -s -f --dry-run < abc.patch; then
echo "Pass"
fi
我试过什么?我重定向了字符串 dev/null 结果没有变化
请帮助我了解这里出了什么问题?
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
a=$(cat no-such-file)
echo survived
$ /tmp/a.sh
cat: no-such-file: No such file or directory
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
echo -n $(cat no-such-file)
echo survived
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
#!/usr/bin/env bash
set -e
shopt -s inherit_errexit
f() { :; }
f $(cat no-such-file)
echo survived
$ /tmp/a.sh
cat: no-such-file: No such file or directory
survived
还有其他情况吗?还是某种概括?
我想pdsh
用来断言命令在多个节点上成功运行,如果命令在任何节点上失败,则退出代码(from pdsh
)应该是非零的。
考虑以下示例:
$ pdsh -w host1,host2 "exit 0"; echo $?
host1: host1
host2: host2
0
$ pdsh -w host1,host2 "exit 1"; echo $?
host1: host1: ssh exited with exit code 1
host2: host2: ssh exited with exit code 1
0
$ pdsh -w host1,host2,host3 "exit 1"; echo $?
host1: host1: ssh exited with exit code 1
host2: host2: ssh exited with exit code 1
host3: host3: ssh exited with exit code 255
0
第二个示例应返回非零退出代码。
在第三个示例host3
中不存在并且退出代码仍然为零。
我错过了什么吗?
谢谢