在bash函数中生成后台进程

fox*_*rot 3 unix bash shell bash-function

我正在编写一个Bash函数来启动需要从某个文件夹启动的服务器,但我不想启动此服务器来影响我当前的工作.我写了以下内容:

function startsrv {
        pushd .
        cd ${TRUNK}
        ${SERVERCOMMAND} & 
        popd
}
Run Code Online (Sandbox Code Playgroud)

我的变量都已设置,但是当执行时,我得到一个关于输出中意外分号的错误,看来Bash在后面开始的&符号后插入分号${SERVERCOMMAND}.

有什么我可以做的事情${SERVERCOMMAND}在后台启动,同时仍然使用pushd和popd以确保我最终回到我当前的目录中?

编辑:输出echo ${SERVERCOMMAND},因为它被请求:

yeti --server --port 8727
Run Code Online (Sandbox Code Playgroud)

错误信息:

-bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 11

有什么价值$SERVERCOMMAND?你必须有一个分号.

对于它的价值,您可以将pushd/cd简化为一个pushd:

pushd $TRUNK
$SERVERCOMMAND &
popd
Run Code Online (Sandbox Code Playgroud)

或者创建一个子shell,这样cd只会影响一个命令:

(cd $TRUNK; $SERVERCOMMAND &)
Run Code Online (Sandbox Code Playgroud)