当我尝试执行
时-bash-3.2$ cd /scratch/;nohup sh xyz.sh>>del.txt &;exit
我收到以下错误..
-bash:意外令牌附近的语法错误`;'
我正在尝试使用nohup运行一个独立的过程。& 。 ';'适用于除nohup sh xyz.sh>>del.txt &;
任何人都可以在这里说出问题。感谢
答案 0 :(得分:5)
根据bash
联机帮助页:
列表是由一个运算符
;
,&
,&&
或||
分隔的一个或多个管道的序列,并且可选地由其中一个;
,&
或<newline>
。如果命令由控制操作符
&
终止,则shell在子shell中在后台执行命令。 shell不等待命令完成,返回状态为0.由;
分隔的命令按顺序执行; shell等待每个命令依次终止。返回状态是最后执行的命令的退出状态。
你可以看到&
不仅仅是在后台运行命令的东西,它实际上也是一个分隔符。因此,你不需要需要分号。实际上,尝试它实际上是无效,就像你按顺序放两个分号一样,实际问题是bash
不允许空命令:
pax> echo 1 ; echo 2
1
2
pax> echo 1 ; ; echo 2
bash: syntax error near unexpected token ';'
您可以从以下记录中看到这是如何工作的,其中第二个和第三个日期不分开,因为sleep 10
在后台运行:
pax> date ; sleep 5 ; date ; sleep 10 & date ; wait
Thursday 5 April 09:04:07 AWST 2018
Thursday 5 April 09:04:12 AWST 2018
[1] 28999
Thursday 5 April 09:04:12 AWST 2018
[1]+ Done sleep 10
答案 1 :(得分:2)
新答案:
正如@CharlesDuffy正确评论的那样;我的旧答案创建了一个子shell,这是完全没必要的。实际上&
符号也会终止该行;所以不再需要添加额外的;
。 Bash抱怨,因为只包含;
的单行不是有效命令。 Bash将您的命令读作:
cd /scratch/
nohup sh xyz.sh>>del.txt &
;
exit
因此,您应该删除nohup行之后的;
,并且(再次;感谢@CharlesDuffy);如果您成功进入/scratch/
目录,则只调用nohup命令;使用&&
表示只有在第一个命令成功时才执行下一个命令。
cd /scratch/ && nohup sh xyz.sh>>del.txt & exit
旧答案:
如果您在bash shell中,可以尝试在命令之间输入命令
cd /scratch/ ; `nohup sh xyz.sh>>del.txt &` ; exit
你可以看看这个question