我尝试运行以下命令,但收到错误:
syntax error near unexpected token `do'
命令:
bsub -q XXX -P YYY -J ZZZ -R "rusage[mem=10000,scr=5000]" -R "span[hosts=1]" -n 2 -o lsf.out -e lsf.er while read -r line; dofilename=$(echo $line | awk '{print $1}'); content=$(echo $line | cut -d ' ' -f 2-); echo "$content" | tr ' ' '\n' > "$filename.txt"; done < input.txt
以下命令运行成功:
while read -r line; dofilename=$(echo $line | awk '{print $1}'); content=$(echo $line | cut -d ' ' -f 2-); echo "$content" | tr ' ' '\n' > "$filename.txt"; done < input.txt
但是当加入选项时相同的命令bsub
,则失败。
答案1
您需要在 之前有一个分隔符while
:
busb ... -o lsf.out -e lsf.er while read ...
应该成为
busb ... -o lsf.out -e lsf.er ; while read ...
也dofilename=...
确实应该是do filename=...
。
==
它对我使用 bash 当然有效。
我没有你的 bsub 命令,也没有你的 input.txt 文件,所以......
alias bsub=true
cat >input.txt
foo
bar
baz
^D
然后
$ bsub -q XXX -P YYY -J ZZZ -R "rusage[mem=10000,scr=5000]" -R "span[hosts=1]" -n 2 -o lsf.out -e lsf.er ; while read -r line; do filename=$(echo $line | awk '{print $1}'); content=$(echo $line | cut -d ' ' -f 2-); echo "$content" | tr ' ' '\n' > "$filename.txt"; done < input.txt
$
执行成功。
请注意,分号和“do filename”空格都是必需的。