模拟给定 bash 脚本的命令

模拟给定 bash 脚本的命令

我想知道是否有一个实用程序可以只打印 bash 脚本中执行的命令,而无需实际执行它。这种实用程序的术语是“试运行”。

我知道我可以“回应”我想要的每个命令,但这并不适用于每个脚本。

问候。

答案1

据我所知,bash 或任何其他 shell 解释器都没有“试运行”版本。对于任何基于先前命令结果的条件,这种东西很快就会变得毫无用处。您几乎必须真正运行这些命令才能使后续分支按预期工作,然后您就不再是“试运行”了。等到所有这些问题都解决后,它实际上又变成了真正的东西。

但是根据脚本的结构,您也许能够做出一些“足够好”的东西:

#!/bin/bash

if [ "$1" == "execute" ]    # replace with your favorite keyword
then
    CMD="$1"
    shift
    exit $CMD "$@"          # "$@" is "all arguments", minus what was shifted away
fi
echo "$@"                   # will also print the simulated return value,
exit $1                     #   but that might be okay

我实际上还没有尝试运行它,所以可能会有错误,但你明白我的意思。(我的母语是 C,不是 bash)修改所有其他脚本以使用它而不是直接使用命令。或者,除了第一个参数,您还可以查找文件或任何您想做的事情。请记住,如果您正在打印而不是执行,则模拟的返回值或退出代码对于保持“主”脚本的正确流程可能很重要。

答案2

这几乎是不可能的:“状态变化”是无法模拟的。这需要 Linux 中的每个命令(包括外部命令)都知道这一点。或者,如果范围可以限制在您的脚本中:这需要重写您用于该脚本的所有命令才能知道这一点。


bash -n {script}

将对脚本进行语法检查。与和bash相同 。如果文件正确,则不会打印任何内容,如果不正确,则会回显语法错误所在的行号。zshksh


bash -x script

将打印每一行执行之前


如果您想测试脚本,则需要重现这种情况:创建备份、执行脚本、恢复备份。或者使用第二个系统或分区来执行脚本需要执行的操作。

相关内容