如何在具有&&'s的shell脚本中正确执行参数?

时间:2015-10-11 16:38:49

标签: bash shell

我有一个在开发时使用的bash脚本:

on_write nosetests

每次文件发生变化时都会运行nosetests。但是,我有很多困难让以下工作(它只会运行第一个命令):

on_write mvn test && mvn package

(我已经让它在另一台机器上工作,但却忘记了如何操作)

真正想要的是在每个&&& (比如ogg123 --quiet drop.oga)但是使用它的实验也不能很好。

on_write() {
  while inotifywait -q -q -e close_write -r .
  do
    clear
    "$@"
    ogg123 --quiet /usr/share/sounds/freedesktop/stereo/complete.oga
  done
}

编辑:使用

的工作版本
on_write "mvn test && mvn package"

on_write() {
        while inotifywait -qre close_write .
        do
                clear
                #eval "$@"
                eval "${@/&&/&& ogg123 --quiet /usr/share/sounds/freedesktop/stereo/bell.oga &&}"
                RETURN_VALUE=$?
                ogg123 --quiet /usr/share/sounds/freedesktop/stereo/complete.oga
        done
        return $RETURN_VALUE
}

2 个答案:

答案 0 :(得分:1)

你做不到。命令链中的每个命令都是单独执行的。

on_write mvn test && on_write mvn package

请注意,函数会返回上一个执行命令的退出状态,因此您必须保存并返回相应的命令。

on_write() {
  while inotifywait -q -q -e close_write -r .
  do
    clear
    "$@"
    ret=$?
    ogg123 --quiet /usr/share/sounds/freedesktop/stereo/complete.oga
  done
  return $ret
}

答案 1 :(得分:1)

由于你正在使用bash,你可以使用eval:

on_write() {
  while inotifywait -q -q -e close_write -r .
  do
    clear
    eval "$@"
    ret=$?
    ogg123 --quiet /usr/share/sounds/freedesktop/stereo/complete.oga
  done
  return $ret
}

并运行:

on_write "mvn test && mvn package"