![在后台将输出重定向到文件时 for 循环中出现语法错误](https://linux22.com/image/1146414/%E5%9C%A8%E5%90%8E%E5%8F%B0%E5%B0%86%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%96%87%E4%BB%B6%E6%97%B6%20for%20%E5%BE%AA%E7%8E%AF%E4%B8%AD%E5%87%BA%E7%8E%B0%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF.png)
我正在尝试使用脚本解析一些日志文件,由于所有文件都可以独立解析,因此我尝试在后台运行它们。我正在使用以下命令,但随后出现了语法错误:
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