【问题标题】:how do I start a command in a terminal as if I'd opened the terminal and typed the command如何在终端中启动命令,就像我打开终端并输入命令一样
【发布时间】:2011-11-30 14:03:33
【问题描述】:

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

$ 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'

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

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

【问题讨论】:

    标签: linux bash unix terminal gnome-terminal


    【解决方案1】:

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

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

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

    对于像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"' )
    【解决方案2】:

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

    [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
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 很久以前,但仍然很有趣。我想在插入特殊的 USB 设备后打开 gnome-terminal。我将显示导出到从 udev 规则调用的 sh 文件中,并在其中发出 gnome-terminal。但我希望这是唯一的脚本,在新终端上打印一些信息并等待用户通过阅读输入。 Interactive.It 当我生成不带参数的 gnome-terminal 时起作用,传递 title 什么都不做, x 和 e 只是立即关闭窗口。什么是正确的方法?
      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2020-05-14
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多