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
让后台命令在终止脚本之前完成以解决此问题。
与此相关的问题:
我尝试了各种变体,如下所示:
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
让后台命令在终止脚本之前完成以解决此问题。