我正在尝试使用脚本解析一些日志文件,由于所有文件都可以独立解析,因此我尝试在后台运行它们。我正在使用以下命令,但随后出现了语法错误:
for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &; done; done; done
-bash: syntax error near unexpected token `;'
尽管如果我run_parser.sh
逐个运行脚本而不使用循环,它也能正常运行。例如:
./run_parser.sh 2 1 2 > parse_212.log 2>&1 &
工作得很好。
另外,我以前尝试过:
for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do ./run_parser.sh ${k} ${i} ${j} & > parse_${k}${i}${j}.log ; done; done; done
这也有效,但输出重定向不起作用,所有内容都被打印到屏幕上。
答案1
;
后面不需要有&
,&
本身充当命令分隔符。请参阅Bash 参考手册。
这将执行三个并发ping
:
ping -c 3 askubuntu.com & ping -c 3 askubuntu.com & ping -c 3 askubuntu.com &
答案2
()
您应该像这样放置后台命令:
for k in {2..3}; do for i in {1..3}; do for j in {1..3}; do (./run_parser.sh ${k} ${i} ${j} > parse_${k}${i}${j}.log 2>&1 &); done; done; done