Помогите разобрать команду bash, используемую с LinkerD

Помогите разобрать команду bash, используемую с LinkerD

В настоящее время я пишу скрипт python на Centos 7 VM, который должен выполнить несколько команд оболочки по пути. Я нашел библиотеку, которая делает эту работу, но я получаю ошибку на одной из них. Мне дали эти команды из текстового файла, поэтому я на самом деле не знаю, что они делают. Я понимаю простые, но эти выше моего уровня. Поскольку только 2 строки вызывают ошибку, я знаю, что это не сам скрипт, а скорее то, как я его использую ./linkerd.linkerd'sдвоичный файл, а linkerd_images.txt содержит список изображений:

./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt
./linkerd viz install --ha --skip-checks | grep images: | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt

Я понимаю, что поскольку они используют бинарный файл linkerd, они могут быть уникальными для приложения. Если это так, то мне придется выяснить, где я могу найти документацию, поскольку я не смог найти ее в их репозитории (поэтому я и пришел сюда в первую очередь)

Редактировать: Вот ошибка, которую я получил в скрипте:

UnicodeDecodeError: 'utf-8' codec: can't decode byte 0xe2 in position 49: Invalid continuation byte

Если я запущу первую команду в терминале, то получу:

sed: -e expression #1, char 1: unknown command: '[Question Mark Symbol]'

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

Меня попросили добавить код Python. Я использовал asyncio'sзапустить функциюдля запуска большинства команд оболочки. Итак, сам код python прост:

asyncio.run(run(
     """./linkerd install --ha --ignore-cluster | grep image: | grep linkerd | sed -e 's/^ .*images: //' | sort | uniq >> linkerd_images.txt"""))

Я также проверил двоичный файл linkerd, и он действительно похож на файл json.

решение1

Вот ответ, который я нашел

Проблема была не в каретке, а в апострофе. Человек, который дал мне команду, набрал ее на французской клавиатуре. Поскольку это на моем рабочем ПК, я набрал ее здесь, глядя на свой другой экран, поэтому я перепечатал правильный апостроф, не задумываясь об этом. Теперь, когда я изучил ошибки sed и то, что они означают, это имеет гораздо больше смысла. sed -e expression #1— это первое слово после -e(в данном случае 's/^). Символ № 1 был бы 'тем, куда я должен был изначально заглянуть, если бы знал об этом заранее.

Связанный контент