gpt4 book ai didi

linux - 检查通过 SSH 命令输出的零行

转载 作者:太空狗 更新时间:2023-10-29 12:33:44 26 4
gpt4 key购买 nike

如果我执行以下操作,并且网络出现故障,那么零案例将被执行,这是不应该的。

case "$(ssh -n $host zfs list -t snapshot -o name -H | grep "tank/fs" | wc -l | awk '{print $1}')" in
0) # do something
;;
1) # do something else
;;
*) # fail
esac

早些时候在脚本中我检查我是否可以通过 SSH 连接到 $host,但今天我发现了这个问题,在我检查后网络立即失败。

如果我检查 SSH 命令的返回值,那么我将始终从最后执行的 awk 获取返回值。

问题

我如何确保我实际上计算了 zfs 输出的零行,而不是来自失败的 SSH 连接的零行?

最佳答案

说:

set -o pipefail

在脚本的开头(或在 case 语句之前)。

此外,在执行case 语句之前检查命令的返回码:

set -o pipefail
$value=$(ssh -n $host zfs list -t snapshot -o name -H | grep "tank/fs" | wc -l | awk '{print $1}')
if [ $? == 0 ]; then
case $value in
...
esac
fi

来自manual :

pipefail

If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.

关于linux - 检查通过 SSH 命令输出的零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com