当前位置:  开发笔记 > 编程语言 > 正文

我可以将任意命令块传递给bash函数吗?

如何解决《我可以将任意命令块传递给bash函数吗?》经验,为你挑选了1个好方法。

我正在使用bash脚本,如果存在特定文件,则需要有条件地执行一些操作。这是多次发生,所以我抽象了以下函数:

function conditional-do {
    if [ -f $1 ]
    then
        echo "Doing stuff"
        $2
    else
        echo "File doesn't exist!"
    end
}

现在,当我要执行此操作时,我将执行以下操作:

function exec-stuff {
    echo "do some command"
    echo "do another command"
}
conditional-do /path/to/file exec-stuff

问题是,我烦恼的是我要定义两件事:一组要执行的命令的功能,然后调用我的第一个功能。

我想以一种干净的方式直接将此命令块(通常是2个或更多)传递给“条件执行”,但是我不知道这是如何可行的(或者甚至是可能的)...有人吗?有任何想法吗?

请注意,我需要将其作为可读的解决方案...否则,我宁愿坚持使用现有的东西。



1> Ludvig A. No..:

对于大多数C程序员来说,这应该是可读的:

function file_exists {
  if ( [ -e $1 ] ) then 
    echo "Doing stuff"
  else
    echo "File $1 doesn't exist" 
    false
  fi
}

file_exists filename && (
  echo "Do your stuff..."
)

或单线

file_exists filename && echo "Do your stuff..."

现在,如果您确实希望从该函数运行代码,则可以这样做:

function file_exists {
  if ( [ -e $1 ] ) then 
    echo "Doing stuff"
    shift
    $*
  else
    echo "File $1 doesn't exist" 
    false
  fi
}

file_exists filename echo "Do your stuff..."

但我不喜欢这种解决方案,因为您最终将最终转义命令字符串。

编辑:更改“评估$ *”为$ *。实际上,不需要评估。与bash脚本一样,它是在我喝了几杯啤酒时才写的;-)

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有