2015-12-06 4 views
0

С помощью этого кода я получаю эту ошибку, и моя функция не доступна:BASH - В то время как ошибка петли

ERREUR де syntaxe Пре-дю-Symbole inattendu «<» `сделано < < (эхо -e «$ TARGET_PORTS ") 'предупреждение: синтаксические ошибки в. или Eval заставит будущие версии оболочки для прерывания, как Posix требует

function my_func{ 
    while read Port 
    do 
      CHECK_HG=`raidcom get host_grp -port $Port -IH${CCI_INST} |grep -iw ${HOST}` 
      if [ ! -z "$CHECK_HG" ]; then 
        export HMO=`raidcom get host_grp -port $Port -IH${CCI_INST} | grep -i ${HOST} | awk -F " " '{print \$5}'` 
        if [ $HMO == "LINUX/IRIX" ]; then 
          HMO=`echo $HMO | awk -F "/" '{print \$1}'` 
        fi 
        #comment 
        NBPort=`expr $NBPort + 1` 
        #comment 
        PORT_HG=$PORT_HG"$Port;\n" 
        fi 
    done < <(echo -e "$TARGET_PORTS") 
} 

Так что, когда я изменить мой цикл, я не получаю ошибки, я, но теряет все данные в переменном, чтобы восстановить в основном сценарии ,

function my_func{ 
    echo -e "$TARGET_PORTS" | while read Port 
    do 
      CHECK_HG=`raidcom get host_grp -port $Port -IH${CCI_INST} |grep -iw ${HOST}` 
      if [ ! -z "$CHECK_HG" ]; then 
        export HMO=`raidcom get host_grp -port $Port -IH${CCI_INST} | grep -i ${HOST} | awk -F " " '{print \$5}'` 
        if [ $HMO == "LINUX/IRIX" ]; then 
          HMO=`echo $HMO | awk -F "/" '{print \$1}'` 
        fi 
        #comment 
        NBPort=`expr $NBPort + 1` 
        #Comment 
        PORT_HG=$PORT_HG"$Port;\n" 
        fi 
    done 
} 

Есть идеи? Большое спасибо.

+0

Может попробовать удалить один «<» в конец цикла while. –

+0

Нет ... такая же ошибка с: done <(echo -e "$ TARGET_PORTS") или сделано <(echo -e "$ TARGET_PORTS") – Indi59

+0

Выполняется сценарий с оболочкой, отличной от 'bash', и что shell не понимает замещение процесса. – chepner

ответ

0

Ваше перенаправление выглядит правильно для сценария bash, оно имеет формат, как описано на https://stackoverflow.com/a/28927847/3220113.
Можете ли вы добавить shebang (#!/bin/bash в первой строке скрипта), пытаясь заставить его в bash?

Другое решение (приятно, когда вам нужно запустить тот же сценарий в KSH на AIX/Solaris и в Баш) меняет время в обмен на петлю:

for Port in $(echo -e "$TARGET_PORTS") do 
    ... 
done 
+0

спасибо, что у вас есть чпнер, скрипт запускался с sh "Path/script ....". С bash «Path/script ....» его работа! – Indi59

Смежные вопросы