Ali*_*adi 15 command-line bash scripts gnome-terminal
我想编写一个脚本,用于在不同的终端中同时打开多个程序(服务器)——不管是哪一个——并将不同的命令分配给不同的终端,命令“登陆”在正确的终端内。这可能吗?
也许,像这样:
我可以以某种方式标记终端窗口,以便在正确的终端内执行命令吗?
我还想在他们的程序运行时观察所有终端 - 我的程序有一个参数来将跟踪/调试打印到终端。所以我想看看他们之间交换了什么消息。
注意:我不太关心交换数据的安全性,因为这个脚本应该作为一个“模拟”。我已将每个服务器配置为从本地主机上的分配端口运行。
Jac*_*ijm 15
由于您提到您解决了针对您的特定情况的问题,因此下面是通用解决方案。感谢xdotool
的--sync
选项,它在我运行的测试中非常可靠;我可以将命令“发送”到特定的终端窗口,它毫无例外地完美运行。
该解决方案存在于脚本中,该脚本可以使用两个选项运行,
-set
并且-run
:
要设置(打开)任意数量的终端窗口,在本例中为 3:
target_term -set 3
Run Code Online (Sandbox Code Playgroud)
三个新终端将打开,它们的窗口 ID 被记住在一个隐藏文件中:
为清楚起见,我最小化了我从 :) 运行命令的终端窗口
现在我创建了三个窗口,我可以使用运行命令向其中之一发送命令(例如):
target_term -run 2 echo "Monkey eats banana since it ran out of peanuts"
Run Code Online (Sandbox Code Playgroud)
如下图,命令在第二个终端运行:
随后,我可以向第一个终端发送命令:
target_term -run 1 sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
使sudo apt-get update
运行在终端1:
等等...
该脚本需要wmctrl
和xdotool
:
sudo apt-get install wmctrl xdotool
Run Code Online (Sandbox Code Playgroud)将下面的脚本复制到一个空文件中,将其保存为target_term
(无扩展名!)~/bin
(~/bin
如有必要,请创建目录。
使脚本可执行(不要忘记)并注销/登录或运行:
source ~/.profile
Run Code Online (Sandbox Code Playgroud)现在设置您的终端窗口,以所需窗口的数量作为参数:
target_term -set <number_of_windows>
Run Code Online (Sandbox Code Playgroud)现在,您可以使用以下命令向任一终端“发送”命令:
target_term -run <terminal_number> <command_to_run>
Run Code Online (Sandbox Code Playgroud)target_term -set 3
Run Code Online (Sandbox Code Playgroud)
该脚本设置为gnome-terminal
,但可以通过更改application
脚本头部部分中的用于任何终端(或其他程序):
target_term -run 2 echo "Monkey eats banana since it ran out of peanuts"
Run Code Online (Sandbox Code Playgroud)无需说该脚本仅适用于命令调用的终端设置(windows):
target_term -set
Run Code Online (Sandbox Code Playgroud)
然后终端窗口将被脚本“标记”,就像您在问题中提到的那样。
target_term
会话,脚本创建的隐藏文件将被简单地覆盖,因此无需将其删除。 归档时间: |
|
查看次数: |
13705 次 |
最近记录: |