Преобразование кратной строки bash скрипта в одну строку - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь написать сценарий bash для использования в коде python.

Многострочная bash команда (это отлично работает при запуске напрямую с терминала)

mydatefile="/var/tmp/date"
while IFS= read line
do
    echo $line
        sh /opt/setup/Script/EPS.sh $(echo $line) | grep "WORD" | awk -F ',' '{print $6}'
    sleep 1
done <"$mydatefile"

Моя однострочная конверсия

mydatefile="/var/tmp/date;" while IFS= read line do echo $line; sh /opt/setup/Script/EPS.sh $(echo $line) | grep "WORD" | awk -F ',' '{print $6}'; sleep 1; done <"$mydatefile";

ОШИБКА

-bash: syntax error near unexpected token `done'

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Отсутствует ; (фатальная синтаксическая ошибка):

while IFS= read line; do echo ...
#                   ^
#                 here

Подробнее:

  • объединено grep+awk в одной команде
mydatefile="/var/tmp/date"
while IFS= read line; do
    echo "$line"
    sh /opt/setup/Script/EPS.sh "$line" | 
        awk -F ',' '/WORD/{print $6}'
    sleep 1
done < "$mydatefile"
  • используйте больше цитат! Узнайте, как правильно использовать кавычки в оболочке, это очень важно:

    «Двойные кавычки» для каждого литерала, содержащего пробелы / метасимволы, и для каждого расширения: "$var", "$(command "$var")", "${array[@]}", "a & b". Используйте 'single quotes' для кода или буквальные $'s: 'Costs $5 US', ssh host 'echo "$HOSTNAME"'. См.
    http://mywiki.wooledge.org/Quotes
    http://mywiki.wooledge.org/Arguments
    http://wiki.bash-hackers.org/syntax/words

  • наконец:

mydatefile="/var/tmp/date;" while IFS= read line; do echo $line; sh /opt/setup/Script/EPS.sh "$line" | awk -F ',' '/WORD/{print $6}'; sleep 1; done < "$mydatefile";
0 голосов
/ 26 мая 2020

Одним из способов сделать это преобразование может быть вставка скрипта в командную строку, а затем поиск в истории - хотя это может зависеть от версии редактора командной строки, которая у вас есть. Обратите внимание, что вам нужна точка с запятой перед do, но НЕ после. Вас наказывают как за слишком большое количество точек с запятой, так и за их слишком мало.

Другой способ - это построчно складывать каждую строку в вашем скрипте и продолжать ее тестирование.

Подход с двоичным разделением это сделать первую половину, протестировать и отменить или продолжить.

Как только у вас будет 1 строка, которая работает, вы можете вставить ее в python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...