Откройте новую консоль из скрипта, выполнив команду и став по завершении интерактивной
Я хочу иметь возможность получить скрипт (запускается при запуске), чтобы открыть 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
Я не думаю, что могу дать вам сочную галочку)
2 ответа
Благодаря комментариям @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, а затем добавляет ваши команды в конце
Более короткое и простое решение:
konsole -e '$SHELL -c "ls; $SHELL"' &
У этого нет проблем с историей или источниками..bashrc
или. Если ваш$SHELL
Переменная среды не указывает на bash, вы можете указать ее вручную.
Это создает вторую оболочку (bash) внутри того же окна терминала, поэтому некоторые вещи из первой команды могут не быть перенесены.
Ответ адаптирован из ответа Askubuntu .