3

我花了很多时间打开终端并在其中输入命令。

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

每隔一段时间,我就会发现自己进入那个窗口并用 control-C 杀死进程,然后重新启动它。事实上,我通常会将reset && .... 位别名为更典型的东西,比如rctf。

如何自动化该过程的第一部分?到目前为止我能做的最好的是

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

但这存在各种问题。首先 ~ 没有得到扩展,所以找不到文件。其次,当命令结束时,终端退出。

有什么方法可以像我打开终端然后输入内容一样自动启动终端?(如果您可以在历史记录中获取命令以便可以使用向上箭头重新启动它,则可以加分)。

4

3 回答 3

3

对于交互式程序,我使用:

    xterm -e 'sh -c "vi $HOME/foo.txt; sh"'

sh -c意味着我的命令字符串中的变量被替换,sh最后的意思是在我完成后启动一个 shell,vi而不是关闭终端窗口。

对于像这样的非交互式程序tail,只能通过按 CTRL-C 向进程发送 SIGINT 来停止,我使用trap内置的 shell 来确保如果用户按 CTRL-C 而不是关闭终端窗口:

    xterm -e sh -c 'trap sh SIGINT; tail -f $HOME/foo.txt'
于 2011-10-04T10:44:52.260 回答
3

如果您不介意将命令存储在文件中,则可以--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

一旦您进入新终端(或在您想要/需要时),文件中的条目将被附加到您的历史记录中(而不运行它们),然后您就可以像普通历史记录条目一样访问它们。

于 2011-10-04T11:20:56.700 回答
1

使用 $HOME 变量而不是波浪号。

gnome-terminal --title rctf -e "tail -F $HOME/.bashrc"
于 2011-10-04T10:44:11.013 回答