我正在处理一个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个或更多)直接传递给“条件执行”命令。以一种干净的方式,但我不知道这是如何可行的(或者甚至是可能的)......有没有人有任何想法?

注意,我需要它是一个可读的解决方案......否则我宁愿坚持我所拥有的。

有帮助吗?

解决方案

对于大多数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..."

我不喜欢那个解决方案,因为你最终会最终逃脱命令字符串。

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

其他提示

一个(可能是黑客)解决方案是将单独的函数一起存储为单独的脚本。

回答:

[ -f $filename ] && echo "it has worked!"

或者你可以把它包起来,如果你真的想:

function file-exists {
    [ "$1" ] && [ -f $1 ]
}

file-exists $filename && echo "It has worked"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top