在bash

时间:2018-05-18 23:09:35

标签: linux bash unix

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

3 个答案:

答案 0 :(得分:1)

这是不可能的。

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

我认为你要做的是"事务化"一系列Linux命令。这是不可能的,因为Linux不是事务性的。

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

答案 1 :(得分:0)

只需将shebang中的set -x放入脚本中即可。它将在您的代码中按命令为您提供详细信息,无论它们是否成功。

例如,以下是一个脚本。

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

答案 2 :(得分:0)

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

一个常见的方法是编写测试:创建一个具有适当状态的独立环境,您可以在不破坏重要内容的情况下执行任何操作,并在那里运行脚本。如果它似乎在每次运行中做正确的事情,你至少可以相信它会在你的生产环境中做正确的事情。