我正在尝试编写一个bash脚本来自动运行一些命令。但是,其中一些命令应该在自己的终端选项卡中运行。 所以我在我的bash脚本中使用以下内容来打开一个新选项卡:
xdotool key ctrl+shift+t
这可以完成这项工作,但我的bash脚本中的下一个命令仍然在前一个终端选项卡中执行。 如何激活新打开的终端选项卡并在此选项卡中运行下一个命令?
答案 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中的脚本,而不是自行弄乱,可以包装使用xdotool
和wmctrl
的窗口化方法来“发送”命令不同的终端窗口。该脚本是用python 3编写的,但可以轻松地针对所选的shell环境进行重写。
更直接的方法涉及使用TIOCSTI ioctl
将字符注入另一个终端。根据{{1}}手册页:
tty_ioctl
这里有c和perl包装器,还有python引用的this answer中的示例。
答案 2 :(得分:0)
您如何使用xdotool
?可以使用一条链来完成,例如:
$ xdotool key "ctrl+shift+t"; xdotool type "ls"; xdotool key Return