bash 在后台运行 运行 命令

bash function run command in background

与此相关的问题:

我尝试了各种变体,如下所示:

function ge() {
    if [ "" == ""]
    then
        geany &
    else
        eval "geany  &"
#also tried:
        geany  &
        geany "" &
        etc
    fi
}

我尝试过使用或不使用 eval,是否引用 $1 等等。 在所有情况下(如果它完全有效)我得到 bash: [: some.txt: unary operator expected

我想要的是后台编辑opens/creates文件,这样我仍然可以使用终端进行前台任务。

最终,我想要一个可以执行上述预期的工作函数,但 geany 被 $EDITOR 替换。所以在不同的平台上我可以使用不同的编辑器。

为什么函数中的语法与脚本中的语法不同?

当然可以通过脚本在后台启动命令:

#!/bin/bash

cmd=geany

function ge {
    if [[ $# -eq 0 ]]
    then
        ${cmd} &
    else
        ${cmd} "$@" &
    fi
}

ge "$@"

或更简单:

#!/bin/bash

geany "$@" &

但是在后台启动交互式命令并终止脚本很可能会失败,因为后台命令的 stdin 将在脚本结束后立即关闭。 不过,您可以 wait 让后台命令在终止脚本之前完成以解决此问题。