Из скрипта bash я хочу открыть окно LXTerminal и выполнить несколько команд, например:

lxterminal -e "echo 'Hello' && sleep 5"

Он даже не читает первую команду (как я пытался инвертировать порядок) и не будет работать ни с простой command1 ; command2 цепочка команд2 . Очевидно, что это работает с одной командой.

Есть идеи? Заранее спасибо.

3 ответа3

1

Это задокументированная ошибка с lxterminal. У вас есть альтернативная терминальная программа? xterm, gnome-терминал и т. д.? lxterm (отличается от lxterminal) полностью поддерживает то, что вы пытаетесь сделать, что обсуждается в этом отчете об ошибках. У меня нет свободного доступа к этому пакету из моей среды, и я не смотрел на него.

Полнофункциональный обходной путь - создать сценарий оболочки, содержащий вашу последовательность команд, и передать команду в lxterminal просто этим сценарием.

Например, в разделе вашего скрипта, который выполняет этот вызов lxterminal, сделайте что-то вроде этого:

tmpScript=$(mktemp -u) || { echo "tmp file generation error!"; exit 1; }
echo '#!/bin/bash' > $tmpScript
echo "echo 'Hello' && sleep 5" >> $tmpScript
chmod +x $tmpScript
lxterminal -e "$tmpScript"

Это работает, по крайней мере, в моей среде (fed 24; x86_64; lxterminal версия 0.2.0, ядро 4.6.5).

Если только lxterminal не является вашим единственным вариантом, он не подходит для этой работы. Учитывая возраст этой ошибки, это, вероятно, никогда не будет. xterm, как правило, наиболее популярный вариант для такого рода вещей из-за портативности и простоты использования, хотя я неравнодушен к konsole.

0

Вы можете использовать любой другой терминал, где это работает. Например, в xterm это работает:

xterm -e "echo 'Hello' && sleep 5"

Поскольку xterm является эмулятором терминала по умолчанию для X, это должно быть решением и для вас.

0

Решение состоит в том, чтобы сделать это с модификатором --command вот так; lxterminal --command cd ~/some/catalog && echo 'Hello'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .