如何在后台执行命令的情况下编写一行bash

如何在后台执行命令的情况下编写一行bash,bash,Bash,我需要一行if语句 if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something &; fi 我想用做点什么&把任务做点什么放到后台,但是bash抱怨 bash: syntax error near unexpected token `;' 然后我试图用\& if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something \&; fi 但这似乎不对,任务在前台而不是后台执行

我需要一行if语句

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something &; fi
我想用
做点什么&
把任务
做点什么
放到后台,但是bash抱怨

bash: syntax error near unexpected token `;'
然后我试图用
\&

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something \&; fi

但这似乎不对,任务在前台而不是后台执行。

您不需要最后的分号。如果[[“$TRAVIS_OS_NAME”==“linux”],请尝试
;然后做点什么&fi

你不需要最后的分号。如果[[“$TRAVIS_OS_NAME”==“linux”],请尝试
;然后做点什么&fi

你可以使用
eval

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then eval "do-something &" ; fi

这将在后台执行您的
执行操作。

您可以使用
eval

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then eval "do-something &" ; fi

这将在后台执行您的
操作。

根据
bash
手册:

一个简单的命令是一系列可选变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止

控制运算符定义为:

。。。执行控制功能的令牌。它是以下符号之一:
|
&
&&

因此,
&
本身就是一个控制操作符,您只允许在一个简单命令的末尾使用一个控制操作符。尝试执行以下操作:

sleep 10 & ; echo now
将给您带来与以下相同的错误:

sleep 10 ; ; echo now
正确的方法是:

sleep 10 & echo now

就这对您意味着什么而言,正确的方法是不使用双控操作员:

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something & fi

根据
bash
手册页:

一个简单的命令是一系列可选变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止

控制运算符定义为:

。。。执行控制功能的令牌。它是以下符号之一:
|
&
&&

因此,
&
本身就是一个控制操作符,您只允许在一个简单命令的末尾使用一个控制操作符。尝试执行以下操作:

sleep 10 & ; echo now
将给您带来与以下相同的错误:

sleep 10 ; ; echo now
正确的方法是:

sleep 10 & echo now

就这对您意味着什么而言,正确的方法是不使用双控操作员:

if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then do-something & fi

非常感谢你的帮助!投赞成票!我决定接受paxdiablo的回答,因为它给了未来的读者一个完整的画面。非常感谢你们的帮助!投赞成票!我决定接受paxdiablo的答案,因为它给了未来的读者一个完整的图景。