如何在 shell 脚本中使用 gnome-terminal 命令在先前打开的终端中运行命令?

如何在 shell 脚本中使用 gnome-terminal 命令在先前打开的终端中运行命令?

我想运行一个需要四个终端 A、B、C 和 D 的源代码。Ubuntu 中有一些用于运行源代码的命令。这些命令必须在终端中按顺序运行A, B, C, D, A, B and C。实际上,这些命令是相互关联的,必须按照特定的顺序执行。

我想使用 shell 脚本自动运行源代码。我已经编写了一个可以打开多个终端的 shell 脚本,gnome-terminal到目前为止运行良好:

gnome-terminal --title="A" -- bash -c "cd ~; ./myscript1; exec bash"
gnome-terminal --title="B" -- bash -c "cd ~; ./myscript2; exec bash"
gnome-terminal --title="C" -- bash -c "cd ~; ./myscript3; exec bash"
gnome-terminal --title="D" -- bash -c "cd ~; ./myscript4; exec bash"

现在我想回到终端A并在其中运行另一个命令。

以下语句不起作用,它会打开一个新的终端!

gnome-terminal --title="A" -- bash -c "cd ~; command; exec bash"

在阅读了 Gnome-terminal 的手册页并在网上搜索后,我不明白如何做到这一点。

答案1

你不能,除非以一种黑客的方式使用按键模拟。例如xdotool切换回第一个窗口,然后粘贴一些命令。

可能有更好的方法来实现您的目标。但是,为了给我们提供更好的建议,我们需要知道您真正想要实现的目标。

答案2

尝试运行以下演示A

脚本master创建一个临时文件(在)并在窗口中/tmp启动a-script和。b-scriptxterm

安装

sudo apt install xterm

将所有脚本放入专用目录,使其可执行并运行

./master

master

#!/bin/bash

echo "$0 start"

b4a=$(mktemp)

nohup xterm -fa default -e ./a-script "$b4a" 2> /dev/null &
nohup xterm -fa default -e ./b-script "$b4a" 2> /dev/null &

if test -f "$b4a"
then
 rm "$b4a"
fi
echo "$0 finish"

a-script

#!/bin/bash

echo "$0 start"
echo "$0 can do things here ..."
while ! test -f "$1"
do
 sleep 1
 echo -n "."
done
echo ""
echo "$0 can do things here ..."
rm "$1"
read -p "$0: Press enter to finish "

b-script

#!/bin/bash

echo "$0 start"
echo "$0 can do things here ..."
sleep 5
touch "$1"
read -p "$0: Press enter to finish "

相关内容