我不想重复我的问题,而是想向你描述一下所需的用户案例:
我创建了一个简短的 shell 脚本来运行命令“gnome-terminal --someoptionflagname 'my text to be posted'”,并执行该脚本。
Gnome-terminal 弹出,命令行提示符后面跟着我的文本。
IE:fields@mycomputer:/$ my text to be posted
这能做到吗?
答案1
答案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-file
和gnome-terminal
来--command
解决这个问题时遇到的问题是,shell 在执行 init 脚本时无法访问 STDIN。例如,如果我想运行需要用户输入的某些东西(ftp、telnet 等),但之后让父 shell 继续运行,那么它将无法工作;到目前为止,我看到的唯一例外是 ssh:
xterm -e /bin/bash --init-file <(echo 'ssh -X some-machine')
...但我需要的比这个玩具示例更复杂。无论如何,我希望这些--init-file
内容对阅读此问题的人有用。