对于应用程序,我需要打开一个新的终端窗口,然后在其中执行一些命令。
我尝试了命令
gnome-terminal
它工作正常,它打开一个新终端,但是当我想发送命令时我不能,它说解析参数失败,所以我不确定我应该怎么做
gnome-terminal --ls
# Failed to parse arguments: Unknown option --ls
答案1
你可以这样做:
gnome-terminal -- bash -c "ls; exec bash"
请注意,您必须在新终端中拥有一个长期运行的应用程序,才能使其在人眼看来保持打开足够长的时间。它可以是一个全新的bash
应用程序,也可以只是一个长期运行的应用程序:
gnome-terminal -- top
gnome-terminal -- tail -f somefile.txt
其他终端有时有一个内置选项来保持打开状态:
xterm -hold -e ls
但你可以用同样的技巧exec
:
xterm -e "ls; exec bash"
当然,您也可以添加一个-hold
选项:
xterm -hold -e "ls; exec bash"
但在这种情况下,xterm
即使bash
退出后窗口仍会保持打开状态。而且你必须自己关闭窗口。
答案2
这需要一个两步过程。
- 您需要开始
gnome-terminal
运行一个等待命令“发送”的程序 - 您需要与该程序对话,使其执行您希望其执行的操作。
gnome-terminal
以要执行的命令开头的正确语法是
gnome-terminal -- command
不像gnome-terminal --command
你那样。
弄清楚如何执行 1. 后,我们需要找到一个充当守护进程的程序,该程序将侦听发送的命令。
tmux
就是这样一个服务器。你可以运行
gnome-terminal -- tmux -L 'a unique name for a socket'
启动你的 gnome 终端,里面有一个空壳。
然后,您可以使用tmux
“控制模式”向该 tmux 服务器发送命令,例如附加到当前显示在 gnome 终端中的会话,然后在其中创建一个新框架,在该框架中运行您选择的命令。man tmux
详情请参阅。
不过老实说:
gnome-terminal
是一个交互的终端模拟器。你似乎只是想展示一些输出以图形方式;您似乎并不期望gnome-terminal
从用户那里获得输入。在这种情况下正确的做法就是不是使用 gnome-terminal,但使用您计划用来发送命令的任何内容来显示带有恒定宽度字体文本字段的窗口,并在那里打印您想要的任何输出。