如何在终端中启动一个命令,就像打开终端并键入该命令一样。

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'

但是这种方法存在各种问题。首先,波浪号(~)不会被扩展,因此找不到文件。其次,在命令结束后,终端会退出。

有没有办法自动启动终端,就像我打开它并键入某些内容一样?(如果可以在历史记录中获取该命令,则额外得分,并且可以使用向上箭头重新启动该命令)。

3个回答

3

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

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

sh -c的意思是命令字符串中的变量会被替换,而末尾的sh表示在我完成使用vi后启动一个shell,而不是关闭终端窗口。

对于像tail这样的非交互式程序,只能通过按下CTRL-C发送SIGINT信号给进程来停止它,因此我使用shell内置的trap命令确保如果用户按下CTRL-C而不是关闭终端窗口,则会运行一个shell:

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

这确实可以满足我在vi中的需求,但是使用tail时,按Ctrl-C终止程序也会终止xterm。(使用xterm -e 'sh -c "tail -F ~/.bashrc; sh"') - John Lawrence Aspden

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

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


1

使用$HOME变量代替波浪号。

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

很久以前,但仍然有趣。我想在插入特殊的USB设备后打开gnome-terminal。我在我的sh文件中导出了显示器,该文件从udev规则调用,并在其中发出gnome-terminal。但是我希望这是唯一的脚本,可以在新终端上打印一些信息并通过read等待用户输入。交互式。当我没有参数生成gnome-terminal时,它可以工作,传递标题不起作用,x和e会立即关闭窗口。有什么正确的方法吗? - icbytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接