试运行功能:如何实现打印命令或执行命令的功能

试运行功能:如何实现打印命令或执行命令的功能

如果您能就如何添加试运行功能提出任何其他建议,我们将不胜感激。

我正在尝试创建一个以“空运行”模式或实时模式运行的函数。

例如(伪代码):

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. 我们将有许多可执行函数

  2. 功能将会由缺乏经验的开发人员添加和编辑,因此任何复杂的东西都可能会被破坏。

答案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.

不会实际上试运行任何东西,但它的工作方式与您描述的类似。

相关内容