让我向您描述所需的用户案例,而不是重新表述我的问题:
我创建了一个简短的 shell 脚本来运行命令“gnome-terminal --someoptionflagname '我要发布的文本'”,然后执行这个脚本。
Gnome-terminal 弹出,命令行提示后跟我的文本。
IE:fields@mycomputer:/$ my text to be posted
这可以做到吗?
让我向您描述所需的用户案例,而不是重新表述我的问题:
我创建了一个简短的 shell 脚本来运行命令“gnome-terminal --someoptionflagname '我要发布的文本'”,然后执行这个脚本。
Gnome-terminal 弹出,命令行提示后跟我的文本。
IE:fields@mycomputer:/$ my text to be posted
这可以做到吗?
您可以使用expect ( install ) 来做到这一点。创建并生成可执行文件
~/bin/myprompt
:并运行 Gnome 终端:
ændrük 的建议非常好并且对我有用,但是该命令在脚本中是硬编码的,如果您调整终端窗口的大小,它就不能正常工作。使用他的代码作为基础,我添加了将命令作为参数发送到 myprompt 脚本的功能,并且该脚本可以正确处理调整终端窗口的大小。
并运行 Gnome 终端:
如果我理解正确,您希望将您的第一行输入预填充为您在 gnome-terminal 命令行上传递的内容。
我不知道如何用 bash 准确地做到这一点,但这里有一些接近的东西。在您的
~/.bashrc
中,在最后添加以下行:运行
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
,并在提示时按下Up以调用文本。另请注意,如果您
set -o history
在..bashrc
Up#
ændrük 的回答很好,但对于这项任务来说可能有点重量级。
这是一个基于其参数编写脚本的脚本
如果您没有进行过多的 shell 编程,那么这里似乎比这里有更多的魔力。首先,我命名一个临时文件来保存脚本,其中
$$
是运行此脚本的 shell 的进程 ID。这个/tmp/something.$$
比喻用于这个脚本的两个实例同时运行,它们不会尝试使用同一个临时文件。该变量
$SHELL
设置为运行脚本的 shell 的名称。如果您使用 /usr/bin/bash,大概您希望迷你脚本也使用它。这
"$@"
是一个 shell 习惯用法,用于“插入我的所有参数,如果需要引用它们”。这种特殊的语法导致将参数插入为两个元素
而不是四个
$@
会产生脚本的最后几行安排 gnome-terminal 开始运行迷你脚本,然后启动交互式 shell。当 gnome-terminal 退出时,临时脚本被删除,因为乱扔垃圾是不酷的。
最后一行不是小脚本的一部分,它表明小脚本有效。如果上面的 11 行脚本在一个名为
rt.sh
then 的文件中chmod
,则使其可执行,然后执行。所有这一切的结果将是一个启动的 gnome 终端,显示
在它的第一行,然后启动一个交互式外壳:
我最喜欢解决这个问题的两个答案是 using
expect
和这个他们建议--init-file
在 shebang 或执行终端时使用标志的地方:...并将其执行为:
expect
可能是更好的解决方案(出于我将概述的原因),除了我无法控制它是否安装在我的目标环境中。我在使用 bash
--init-file
和gnome-terminal
's时遇到的问题--command
是为了解决这个问题,shell 在执行初始化脚本时无法访问 STDIN。例如,如果我想运行一些需要用户输入(ftp、telnet 等)但之后让父 shell 运行的东西,它将无法工作;到目前为止,我看到的唯一例外是 ssh:...但我需要的比这个玩具示例更复杂。无论如何,我希望这些
--init-file
东西对阅读这个问题的人有用。要在 gnome-terminal 中的交互式 bash 中开始,并且已经执行了一些命令,我将这些命令放在一个安装文件中,并将内容动态附加到我的
.bashrc
文件中:您可以使用
-e
or-x
参数在新弹出的终端中运行命令,但这并不是您想要的。