![试运行功能:如何实现打印命令或执行命令的功能](https://linux22.com/image/1521812/%E8%AF%95%E8%BF%90%E8%A1%8C%E5%8A%9F%E8%83%BD%EF%BC%9A%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E6%89%93%E5%8D%B0%E5%91%BD%E4%BB%A4%E6%88%96%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%E7%9A%84%E5%8A%9F%E8%83%BD.png)
如果您能就如何添加试运行功能提出任何其他建议,我们将不胜感激。
我正在尝试创建一个以“空运行”模式或实时模式运行的函数。
例如(伪代码):
function do-stuff() {
dry_run_or_real
brew install java
for x in dir ; do echo $x ; done
}
function dry_run_or_real() {
if [ ! -z "$GLOBAL_DRY_RUN" ] ; then
echo "We would do this:$*"
else
# we are actually running the code
$*
fi
}
如果设置了 GLOBAL_DRY_RUN,则为以下文本:
We would do this:
brew install java
for x in dir ; do echo $x ; done
但上述命令不会被执行。
最大的限制是 do-stuff 的主体必须只进行最少的更改才能支持空运行测试代码:
我们将有许多可执行函数
功能将会由缺乏经验的开发人员添加和编辑,因此任何复杂的东西都可能会被破坏。
答案1
这样的事情怎么样?
do-stuff() {
# Pass the name of this function to `dry-run` and do nothing if it
# returns `true`.
dry-run ${(%):-%N} && return 1
echo 'Doing stuff.'
}
dry-run() {
# If GLOBAL_DRY_RUN has been set, output the contents of the function.
[[ -v GLOBAL_DRY_RUN ]] && type -f $1
# The return value of any function is equal to the return value of the
# last operation it performed.
}
实际情况如下:
% do-stuff
Doing stuff.
% GLOBAL_DRY_RUN='any value'
% do-stuff
do-stuff () {
dry-run ${(%):-%N} && return 1
echo 'Doing stuff.'
}
% unset GLOBAL_DRY_RUN
% do-stuff
Doing stuff.
不会实际上试运行任何东西,但它的工作方式与您描述的类似。