如何使用xdotool打开一个新选项卡,切换到它并在其中运行命令

时间:2016-12-20 15:53:58

标签: linux ubuntu xdotool

我正在尝试编写一个bash脚本来自动运行一些命令。但是,其中一些命令应该在自己的终端选项卡中运行。 所以我在我的bash脚本中使用以下内容来打开一个新选项卡:

xdotool key ctrl+shift+t

这可以完成这项工作,但我的bash脚本中的下一个命令仍然在前一个终端选项卡中执行。 如何激活新打开的终端选项卡并在此选项卡中运行下一个命令?

3 个答案:

答案 0 :(得分:1)

您使用的终端仿真器是什么?这在很大程度上取决于此。

通常,您可以在shell脚本中编写要执行的命令,并告诉终端仿真程序在脚本启动后执行该脚本。

xterm的示例:

echo '#!/bin/bash' > /tmp/thescript 
echo 'ls -la' >> /tmp/thescript
chmod +x /tmp/thescript
xterm -hold -e /tmp/thescript

编辑:我刚看到你要求用xdotool来实现这一目标。所以这个答案可能无效。如果是的话请告诉我 - 然后我会删除它。

答案 1 :(得分:0)

如果只想在后台/并行运行命令,而又不等待每个命令在下一个命令开始之前完成,请用与号&终止它们,以指示Shell这样做。

或者,您可以在每个子外壳中用括号( )括起来来执行命令。如果它们是长时间运行的进程,或者您不希望使用它们的输出污染原始shell,则可以将它们分叉并使用(setsid command 1>/path/to/log &)之类的东西将其捕获到文件中。

如果需要单独的选项卡,则可以使用xdotool来键入切换到下一个选项卡的绑定或类似内容,然后键入必须在该选项卡中运行的命令。

您可以使用Jacob Vlijm的this answer中的脚本,而不是自行弄乱,可以包装使用xdotoolwmctrl的窗口化方法来“发送”命令不同的终端窗口。该脚本是用python 3编写的,但可以轻松地针对所选的shell环境进行重写。

更直接的方法涉及使用TIOCSTI ioctl将字符注入另一个终端。根据{{​​1}}手册页:

tty_ioctl

这里有cperl包装器,还有python引用的this answer中的示例。

答案 2 :(得分:0)

您如何使用xdotool?可以使用一条链来完成,例如:

$ xdotool key "ctrl+shift+t"; xdotool type "ls"; xdotool key Return