0

有没有办法在执行它们之前测试我的脚本的所有命令,如果所有命令都成功并且只有在所有命令都成功时才执行它们?

4

3 回答 3

1

这不可能。

如果命令失败,唯一知道1的方法是检查返回码;例如 的值$?。但是您只能在程序运行后从程序中获取返回码。

我认为您正在尝试做的是“事务化”一系列 Linux 命令。这是不可能的,因为 Linux 不是事务性的。


1 - 即使这样也不完全可靠。有缺陷的程序可能无法正确设置退出状态。一个程序可能认为它已经成功,但可能会产生不正确的结果。

于 2018-05-19T06:14:23.500 回答
0

简单地放在set -x脚本中的 shebang 之后。它将在您的代码中逐个命令地为您提供详细信息,无论它们是否成功。

例如以下是一个脚本。

cat script.ksh
#!/bin/bash
set -x

echo "Hola!!"
find -type f -iname "*.txt"
echoi "Done.."
echo "Done again.."

由于系统无法找到echoi命令,所以它给了我以下错误。

./script.ksh: line 6: echoi: command not found

set -e如果任何外部程序返回非零退出状态,则使脚本立即停止。如果您的脚本尝试处理所有错误情况并且应该捕获失败的情况,这将非常有用。

使用时上述脚本会出现以下错误set -ex

+ echoi Done..
./script.ksh: line 6: echoi: command not found
于 2018-05-18T23:22:57.887 回答
0

不,至少对于“成功”的最常见定义而言,这意味着它们都返回零退出代码。考虑一段代码,它检查主机是否可用,是否是 12 点,或者 Kenny 是否还活着。当检查运行时这可能是真的,但当“实际”代码运行时它很可能是错误的。

解决这个问题的一种常见方法是编写测试:创建一个具有适当状态的独立环境,您可以在其中做任何您想做的事情而不会破坏重要的东西,并在那里运行您的脚本。如果它似乎在每次运行时都做正确的事情,那么您至少可以确信它会在您的生产环境中做正确的事情。

于 2018-05-19T09:53:07.613 回答