
Я хочу иметь возможность получить скрипт (запускаемый при запуске) для открытия 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отвечать.