Неожиданный конец строки - dos2unix не исправит это - PullRequest
0 голосов
/ 01 мая 2019

У меня есть следующий код:

#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail
set -u

se () { sed -n 's/\s*r('"$1"').*|r| =\s\+//p'}

### gets the number of cell opt steps
exec 0<"DEMLIR.out"
while read -r line
 do
 gawk 'BEGIN{FS="OPTIMIZATION STEP:"} {print $2}' | tr -s " "
 done>results

 sed -i '/^$/d' results
 #sed -e 's/^[ \t]*//' results

 step=$(tail -n 1 results)
 echo "${step}"

### gets the number of steps in each geo_opt output
 for i in $(seq 1 $step)
 do
 exec 0<"DEMLIR-GEO_OPT-$i.out"
 while read -r line
 do
 gawk 'BEGIN{FS="OPTIMIZATION STEP:"} {print $2}' | tr -s " "
 done>results_geo_$i

 sed -i '/^$/d' results_geo_$i

 step_geo=$(tail -n 1 results_geo_$i)
 echo "${step_geo}"

### goes through each line in distance.out and prints distances to array 
 exec 0<"DEMLIR-GEO_OPT-$i-distance-1.coordLog"
 while read -r line
 do
 for j in $(seq 0 $step_geo)
 do
 "$line" | se
 paste -d' ' <(printf '%s\n' $j) <(se 1,5) <(se 2,5) <(se 2,8)

 done
 done

 done>DEMLIR_task.txt

Я пытаюсь запустить эту программу, но продолжаю получать unexpected end of line error в строке 53. Я видел, что уже есть ответы на эту проблему, но когда я пытаюсь dos2unix, это говорит dos2unix: converting file script_step.sh to Unix format... но это все И когда я снова запускаю код, он не будет работать.

Я ожидаю некоторых ошибок в последнем цикле for, поэтому, если вы видите некоторые из них, вы также можете указать их. Но если они не связаны с исходной проблемой, то вы можете просто игнорировать их.

1 Ответ

1 голос
/ 01 мая 2019

Проблема здесь:

se () { sed -n 's/\s*r('"$1"').*|r| =\s\+//p'}

Вам необходимо ввести точку с запятой или символ новой строки перед }. В противном случае он рассматривается как часть аргумента sed.

...