несколько команд в обратных тиках

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

VERSION=`getserversion.py` |grep `getcliversion.py`

Итак, первая часть запускает версию на сервере, вторая часть запускает версию для клиента, просто пытаясь увидеть, совпадают ли они, но я не могу запустить обе команды, я продолжаю получать ошибки bash, когда я пытаюсь запустить это.


person Stanley LEsniak    schedule 25.01.2021    source источник
comment
Это не лучший подход. Вероятно, вам следует назначить переменные и сравнить их: server=$(getserversion.py); client=$(getcliversion.py); if [ "$server" != "$client" ]; then echo "Mismatch: $server vs $client"; fi   -  person that other guy    schedule 25.01.2021


Ответы (1)


Здесь два возможных пути: разделить команду на две части и использовать BASH для сравнения или написать составную строку. В любом случае лучше использовать $(команду) вместо обратных кавычек.

Разделение команды

SVC_VER=$(getserversion.py)
CLI_VER=$(getcliversion.py)
if [ "$SVC_VER" = "$CLI_VER" ] ; then
   ...
fi

Или объединив их в одну командную строку

MATCH=$(getversions.py | grep $(getcliversion.py))

Обратите внимание, что для второй команды нельзя использовать обратные кавычки, поскольку обратные кавычки не поддерживают вложенность команд.

person dash-o    schedule 25.01.2021
comment
Возможно вкладывать обратные кавычки, это просто беспорядочно (включает в себя обратную косую черту... их количество умножается на глубину вложения). - person Charles Duffy; 25.01.2021
comment
Кстати, я бы предложил процитировать: grep -e "$(getcliversion.py)", поэтому вывод нельзя разделить на несколько аргументов grep, некоторые из которых, вероятно, будут интерпретированы как имена файлов для чтения. - person Charles Duffy; 25.01.2021