Открытие новой консоли из скрипта, выполнение команды и переход в интерактивное состояние по завершении

Открытие новой консоли из скрипта, выполнение команды и переход в интерактивное состояние по завершении

Я хочу иметь возможность получить скрипт (запускаемый при запуске) для открытия konsoleтерминала.
Когда он открывается, он должен выполнять некоторые постоянные действия (например, менять каталог и исходный bashrc) и запускать долго работающую программу.
Если программа вылетает или я захожу и <ctrl+c>она запускается, он должен начать принимать команды из стандартного ввода (например, 'up-enter', чтобы попробовать снова, как будто он был интерактивным все это время).

Я перепробовал много всего, чтобы заставить его работать (сейчас я просто пытаюсь сделать его lsинтерактивным и вернуться к нему по завершении);

konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"

Это связано с цитатами? Мне не следует их использовать, мне следует избегать чего-то?
Мне вообще следует попытаться это осуществить bash?
У меня заканчиваются идеи, но я надеюсь, что это хотя бы достижимо (но, надеюсь, не будет чем-то постыдно простым, что я упустил).

Я буду голосовать за ответы, которые успешно используют другие эмуляторы терминала, если konsoleпроблема именно в этом (но поскольку вопрос конкретно об этом, konsoleя не думаю, что могу дать вам сочную галочку)

решение1

Благодаря комментариям @n.st я написал эту однострочную заметку:

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")

Это просто более короткая версия без tmpfiles, использующая замену процесса bash для следующего:

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Который запустит некоторые команды, отобразит их, изменит среду, запустит длительную программу ( less) и когда она закончится ( :q) будет интерактивной.
Так что замените cd /;ls;echo hi | less(демонстрацию) вашим скриптом.

Истории нет, но, по крайней мере, теперь вы находитесь в правильном каталоге и у вас есть все переменные среды, которые вы, возможно, хотели настроить.


По сути то же самое, что и моя предыдущая попытка;

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

за исключением того, что запись файла находится вне konsoleвыполнения, я сбросил флаг -i, а параметры выполнения не находятся в одном блоке кавычек


К сожалению, этот --rcfileпереключатель ~/.bashrcне позволяет вам загружаться для этих команд, поэтому, если вам нужен псевдоним или что-то в этом роде, вам придется сделать это;

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Который просто копирует ваш bashrc затемдобавляеттвои команды до конца

решение2

Более короткое и простое решение:

konsole -e '$SHELL -c "ls; $SHELL"' &

У этого тоже нет проблем с историей или источниками .bashrc. Если ваша $SHELLпеременная окружения не указывает на bash, вы можете указать ее вручную.

Это создает вторую оболочку (bash) внутри того же окна терминала, поэтому некоторые данные из первой команды могут быть не перенесены.

Ответ адаптирован из askubuntuотвечать.

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