如何启动已在命令行输入某些文本的终端?

如何启动已在命令行输入某些文本的终端?

我不想重复我的问题,而是想向你描述一下所需的用户案例:

我创建了一个简短的 shell 脚本来运行命令“gnome-terminal --someoptionflagname 'my text to be posted'”,并执行该脚本。

Gnome-terminal 弹出,命令行提示符后面跟着我的文本。

IE:fields@mycomputer:/$ my text to be posted

这能做到吗?

答案1

你可以这样做预计安装). 创建并使之可执行~/bin/myprompt

#!/usr/bin/expect -f

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt
expect "$ "

# Type something
send "my text to be posted"

# Hand over control to the user
interact

exit

并使用以下命令运行 Gnome 终端:

gnome-terminal -e ~/bin/myprompt

答案2

ændrük 的建议非常好,对我来说很管用,但是该命令在脚本中是硬编码的,如果您调整终端窗口的大小,它就无法正常工作。使用他的代码作为基础,我添加了向 myprompt 脚本发送命令作为参数的功能,并且该脚本可以正确处理调整终端窗口的大小。

#!/usr/bin/expect

#trap sigwinch and pass it to the child we spawned
#this allows the gnome-terminal window to be resized
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

set arg1 [lindex $argv 0]

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt
expect "$ "

# Type something
send $arg1

# Hand over control to the user
interact

exit

并使用以下命令运行 Gnome 终端:

gnome-terminal -e "~/bin/myprompt \"my text to be posted\""

答案3

如果我理解正确的话,您希望您的第一行输入预填充您在 gnome-terminal 命令行上传递的内容。

我不知道如何使用 bash 来做到这一点,但这里有一个接近的方法。在您的 中~/.bashrc,在最后添加以下行:

history -s "$BASH_INITIAL_COMMAND"

运行gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash,然后Up在提示符下按下以调用文本。

还要注意,如果你set -o history在 的末尾加上 和注释.bashrc,它们将在 bash 启动时输入到历史记录中,因此你可以使用它们作为编辑的基础,通过使用键到达它们Up并删除初始的#

答案4

我最喜欢的两个答案是使用expect这个他们建议--init-file在 shebang 中或执行终端时使用该标志:

#!/bin/bash --init-file
commands to run

...并按如下方式执行:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang

expect可能是更好的解决方案(原因我将概述),但我无法控制它是否安装在我的目标环境中。

我使用 bash--init-filegnome-terminal--command解决这个问题时遇到的问题是,shell 在执行 init 脚本时无法访问 STDIN。例如,如果我想运行需要用户输入的某些东西(ftp、telnet 等),但之后让父 shell 继续运行,那么它将无法工作;到目前为止,我看到的唯一例外是 ssh:

xterm -e /bin/bash --init-file <(echo 'ssh -X some-machine')

...但我需要的比这个玩具示例更复杂。无论如何,我希望这些--init-file内容对阅读此问题的人有用。

相关内容