#linux #bash #unix #terminal #gnome-terminal
#linux #bash #unix #терминал #gnome-терминал
Вопрос:
Я трачу много времени на открытие терминалов и ввод в них команд.
$ gnome-terminal
(change mouse focus to new terminal)
$ reset amp;amp; clear amp;amp; tail -F ~/file_that_grows
время от времени я захожу в это окно и завершаю процесс с помощью control-C, а затем перезапускаю его. На самом деле я обычно использую псевдоним reset amp;amp; …. бит для чего-то более типизируемого, например rctf .
Как я могу автоматизировать первый этап процесса? Лучшее, что я могу сделать до сих пор, это
gnome-terminal --title rctf -e 'tail -F ~/.bashrc'
Но с этим связаны различные проблемы. Во-первых, ~ не расширяется, поэтому файл не найден. Во-вторых, когда команда завершена, терминал завершает работу.
Есть ли какой-нибудь способ автоматически запустить терминал точно так, как если бы я открыл его, а затем что-то набрал? (Дополнительные баллы, если вы можете получить команду в истории, чтобы ее можно было перезапустить с помощью стрелки вверх ).
Ответ №1:
Если вы не возражаете против сохранения вашей команды в файле, вы можете злоупотребить этой --rcfile
опцией bash
. Например, используя следующий скрипт для сохранения ваших команд:
[me@home]$ cat $HOME/.term-rcfile
. ~/.bashrc # chain in the standard rc file
tail -F ~/.bashrc # command to run
Затем вы можете сделать:
xterm -e "bash --rcfile $HOME/.term-rcfile -i"
Также должно работать для gnome-terminal:
gnome-terminal -e "bash --rcfile $HOME/.term-rcfile -i"
«(Дополнительные баллы, если вы можете получить команду в истории, чтобы ее можно было перезапустить с помощью стрелки вверх )».
Я не вижу, как это сделать автоматически, но если ваш запуск:
history -r ~/.term-rcfile
как только вы окажетесь в новом терминале (или когда захотите / понадобится), записи из файла будут добавлены к вашей истории (без их запуска), и тогда у вас будет доступ к ним, как к обычным записям истории.
Ответ №2:
Для интерактивных программ я использую:
xterm -e 'sh -c "vi $HOME/foo.txt; sh"'
Это sh -c
означает, что переменные в моей командной строке заменяются
, а sh
в конце означает, что оболочка запускается после того, как я закончу
, vi
вместо закрытия окна терминала.
Для такой неинтерактивной программы, tail
которую можно остановить, только нажав CTRL-C для отправки SIGINT процессу, я использую trap
встроенную оболочку, чтобы убедиться, что оболочка запускается, если пользователь нажимает CTRL-C вместо закрытия окна терминала:
xterm -e sh -c 'trap sh SIGINT; tail -f $HOME/foo.txt'
Комментарии:
1. Это делает то, что я хочу для vi, но с tail Ctrl-C для завершения программы также убивает xterm. (используя xterm -e ‘sh -c «tail -F ~/.bashrc; sh»‘ )
Ответ №3:
Используйте переменную $HOME вместо тильды.
gnome-terminal --title rctf -e "tail -F $HOME/.bashrc"
Комментарии:
1. Давно, но все еще интересно. Я хочу открыть gnome-terminal после установки специального USB-устройства. Я экспортировал отображение в свой sh-файл, который вызывается из правила udev, и в нем я выдаю gnome-terminal. Но я хочу, чтобы это был единственный скрипт, печатающий некоторую информацию на новом терминале и ожидающий ввода пользователем путем чтения. Интерактивный. Это работает, когда я запускаю gnome-terminal без аргументов, передача title ничего не делает, x и e просто немедленно закрывают окно. Что может быть правильным способом?