2011-10-04 94 views
3

我花了很多时间打开终端并在终端中输入命令。如何在终端中启动命令,就好像我打开终端并输入命令

$ 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

如果你不介意在一个文件中存储你的命令,你可以在bash滥用--rcfile选项。例如,使用下面的脚本来存储您的命令(S):

[[email protected]]$ 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

使用$ HOME变量而不是代字号。

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

很久以前,但仍然很有趣我想在插入特殊的USB设备后打开gnome-terminal 。我在我的sh-file中导出了显示,它是从udev规则中调用的,并且在其中我发布了gnome-terminal。但是我希望这是只有脚本,在新的终端上打印一些信息并通过阅读等待用户的输入。 Interactive.It在我没有参数的情况下产生gnome-terminal时起作用,传递title不会做任何事情,x和e只是立即关闭窗口。什么可能是一个正确的方法? – icbytes

3

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

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

sh -c意味着,在我的命令字符串变量取代 和sh末意味着我完成 后用shell启动vi而不是关闭终端窗口。

对于像tail非交互式程序,只能通过按CTRL-C 发送信号情报的过程中停下来,我用的是壳trap内置,以确保一个 外壳运行,如果用户按下CTRL-C,而不是关闭终端窗口:

xterm -e sh -c 'trap sh SIGINT; tail -f $HOME/foo.txt' 
+0

这就是我想要的vi,但是使用尾部时,Ctrl-C杀死程序也会杀死xterm。 (使用xterm -e'sh -c“tail -F〜/ .bashrc; sh”') –