다음 명령을 실행하려고 시도했지만 오류가 발생했습니다.
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" 공백이 모두 필요합니다.