Страницы

Поиск по вопросам

понедельник, 18 февраля 2019 г.

Последовательное выполнение команд при запуске терминала с опцией execute

Надо сделать запуск Konsole с параметром, запускающим сразу несколько команд. В их числе и команды echo и read
Допустим, пишу:
konsole --noclose -e "echo Have fun; echo Have troubles."
В этом случае, открывается консоль и выводит:
Have fun; echo Have troubles.
Несомненно, это не то, что ожидалось. Экранировать пытался, да никак не вышло исправить. echo Вне зависимости от наличия кавычек и экранирования "съедает" всю строку.
Как можно это дело обойти?
Вторая проблема заключается в том, что бинарника read как такового нет. Чем можно заменить?


Ответ

Правильно так:
konsole --noclose -e /bin/bash -c 'echo "Have fun"; echo "Have troubles."'
В документации к Konsole сказано:
-e command Execute command instead of the normal shell. Note This option will catch all following arguments passed to Konsole, and execute it as command. So this option shouldalways be used as the last option.
Konsole запустить все последующие аргументы как команду вместо нормальной оболочки - bash, ksh, sh и т.д.. Причем, первым аргументом ожидается выполняемая программа, а все последующие, это ее аргументы.
То есть, указанная в вопросе строка выполнится как:
/usr/bin/echo Have fun; echo Have troubles.
и ее вывод:
Have fun; echo Have troubles.
Здесь путь к echo может отличаться. Но что важно, это выполняемая команда (executable), а не оболочка (shell), поэтому ни внутренние команды оболочки (built-in, read в вопросе), ни ее синтаксические элементы и символы ( в вопросе), не имеют здесь своего действия.

Комментариев нет:

Отправить комментарий