как запустить команду в терминале, как если бы я открыл терминал и набрал команду - PullRequest
3 голосов
/ 04 октября 2011

Я провожу много времени, открывая терминалы и набирая в них команды.

$ gnome-terminal
(change mouse focus to new terminal)
$ reset && clear && tail -F ~/file_that_grows

время от времени я пойду к этому окну и убью процесс с помощью control-C, а затем перезапущу его. На самом деле я обычно добавляю псевдоним сброса && .... к чему-то более типичному, например, rctf.

Как я могу автоматизировать первый бит процесса? Лучшее, что я могу сделать, это

gnome-terminal --title rctf -e 'tail -F ~/.bashrc'

Но есть разные проблемы с этим. Во-первых, ~ не раскрывается, поэтому файл не найден. Во-вторых, когда команда завершена, терминал завершает работу.

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

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Для интерактивных программ я использую:

    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'
3 голосов
/ 04 октября 2011

Если вы не против сохранить вашу команду в файле, вы можете использовать параметр --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-терминала:

gnome-terminal -e "bash --rcfile $HOME/.term-rcfile -i"

"(Дополнительные очки, если вы можете получить команду в истории, чтобы ее можно было перезапустить с помощью стрелки вверх)."

Я не вижу, как это сделать автоматически, но если вы запустите:

history -r ~/.term-rcfile

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

1 голос
/ 04 октября 2011

Используйте переменную $ HOME вместо тильды.

gnome-terminal --title rctf -e "tail -F $HOME/.bashrc"
...