tat*_*tsu 10 command-line scripts gnome-terminal
这可能有点晦涩,但我正在尝试做一些棘手的事情:
我正在编写一个脚本,用命令打开一个新选项卡,我想在用户输入到辅助选项卡后切换回第一个选项卡(该选项卡关注的事实是预期行为并且最重要):
echo "new tab is about to open..."
gnome-terminal --tab --active --title="install dependencies..." -- bash -c 'echo "hello";
#other commands;
read user_input;
#now I want to switch back to first tab while this tab works in the backgroud;
command;
command;
command;
command;
command;
command;
command;'
echo "hello welcome back to the correct tab, we have been waiting for you! :)"
read new_user_input;
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
我有这个想法,因为显然 --active 参数调用了一些使新选项卡成为焦点的东西(如果调用它的选项卡未处于活动状态,甚至可以工作)。所以某种性质的东西一定是可能的。
根据此问答:默认终端应用程序中是否有在选项卡之间切换的热键?
打开新标签后,您可以使用Ctrl+返回上一个标签pg up
为了将信号发送到 Bash Shell(gnome-terminal),请使用
xdotool
:
sudo apt install xdotool
Run Code Online (Sandbox Code Playgroud)
在您的脚本中发出以下命令:
xdotool key Control+Page_Up
Run Code Online (Sandbox Code Playgroud)
我刚刚在 Ubuntu 16.04 LTS 上完成安装和测试,它运行完美。它应该适用于所有 X11 桌面。
OP 需要 Wayland 支持,更重要的是需要一种适用于许多 *NIX 发行版的 POSIX 方法。
从这个问答:
...来这个命令:
gnome-terminal -e 'bash -c "sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade; exec bash"'
Run Code Online (Sandbox Code Playgroud)
我们将修改示例命令如下所示:
gnome-terminal -e 'bash -c "second-script.sh; exec bash"'
Run Code Online (Sandbox Code Playgroud)
这second-script.sh
看起来像:
#!/bin/bash
# AU question: https://askubuntu.com/questions/1134625/shell-script-focus-already-open-terminal-tab-from-second-terminal-tab/1135206#1135209
echo "Welcome to the second script."
echo " Run command 1."
sleep 1
echo " Run command 2."
sleep 1
read -n 1 -s -r -p "Press any key to continue"
touch /tmp/second-script-user-ack # signal parent to continue commands there
echo " Run command 3."
sleep 5
echo " Run command 4."
sleep 5
# Now terminates.
exit 0
Run Code Online (Sandbox Code Playgroud)
永远记住使用以下命令标记脚本可执行:
chmod a+x second-script.sh
Run Code Online (Sandbox Code Playgroud)
注意:这会打开第二个终端窗口,该窗口在用户关闭之前一直保持打开状态。这可以更改为自动关闭。
我们的第一个(父)脚本如下所示:
#!/bin/bash
# AU question: https://askubuntu.com/questions/1134625/shell-script-focus-already-open-terminal-tab-from-second-terminal-tab/1135206#1135209
file=/tmp/second-script-user-ack
if [ -f $file ] ; then
rm $file
fi
window=$(xdotool getactivewindow)
# Launch second script running in background, don't wait
gnome-terminal -e 'bash -c "second-script.sh; exec bash"' &&
while true ; do
if [ -f $file ] ; then
break
fi
done
xdotool windowactivate $window
echo "Child still running. Ready to run extra Parent Commands"
read -n 1 -s -r -p "Press any key to continue"
echo
echo " Parent Command 1."
sleep 5
echo " Parent Command 2."
sleep 5
echo "Parent program completed"
read -n 1 -s -r -p "Press any key to continue"
exit 0
Run Code Online (Sandbox Code Playgroud)
当前方法的优点:
second-script.sh
) 完成后输出仍然可见,直到窗口关闭。控制活动窗口的 Wayland 工具并不多。
我确实找到了这个:ydotool但你需要手动编译它。没有 Debian/Ubuntu 安装包。有一些用户可以使用的 Arch Linux 安装包。
归档时间: |
|
查看次数: |
1936 次 |
最近记录: |