如何使用bash脚本在Linux上使用Tmux运行多个非结束命令

问题描述 投票:0回答:2

我有一个运行正常的.txt脚本,打开几个screen窗口并运行几个命令。然后,我添加了一个新行,保存它,运行脚本,它不再有效。我决定把它放回原来的样子,但它仍然不起作用,代码和以前完全一样。我听说screen非常错,不再支持,所以我想是因为这个原因。这是代码:

screen -t ur10_server 0
stuff "cd ~/catkin_ws; source devel/setup.bash;
"
stuff "roslaunch ur_bringup ur10_bringup_joint_limited.launch robot_ip:=192.168.1.102
"

screen -t moveit 1
stuff "sleep 3; cd ~/catkin_ws; source devel/setup.bash;
"
stuff "roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch limited:=true
"

screen -t enhance_ur10 2
stuff "sleep 10; cd ~/catkin_ws; source devel/setup.bash;
"
stuff "roslaunch ur10_3d_calibration ur10_nodes.launch
"

screen -t rviz 3
stuff "sleep 10; cd ~/catkin_ws; source devel/setup.bash;
"
stuff "roslaunch ur10_moveit_config moveit_rviz.launch config:=true;
"

screen -t calibration_manager 4
stuff "sleep 10; cd ~/catkin_ws; source devel/setup.bash;
"
stuff "rosrun ur10_3d_calibration interaction_manager.py
"

screen -t editor 5
stuff "sleep 10; cd ~/catkin_ws; source devel/setup.bash; roscd ur10_3d_calibration
"

hardstatus alwayslastline
hardstatus string "%{= KW} %H [%`] %{= Kw}|%{-} %-Lw%{=bW}%n%f %t%{-}%+Lw %=%C%a%Y-%M-%d"

select 0
bind "." next
bind "," next

运行它的方法是运行命令screen -S real -c screen-real,其中screen-real是.txt文件的名称。如果你没有注意到,我正在使用ros。因此命令在不同的窗口中运行不同的节点。

由于我假设screen问题,我决定尝试使用Tmux。尽管如此,如果您看到修复上一个脚本的方法,我对此持开放态度。

所以,我的问题是:我应该如何以打开5个窗口的方式为Tmux编写我的bash脚本,并在每个窗口上运行5个不同的命令集?所有命令都没有结束,即它们没有完成运行。这就是我需要打开几个窗户的原因。

我已经搜索了互联网的每个角落以获得答案,但是通常需要运行完成的命令,在我的情况下,我在其他答案中看到的代码不适用。

如果您需要更多信息,请索取。我希望我很清楚。

linux bash ros tmux gnu-screen
2个回答
0
投票

我不是100%肯定你在寻找什么,但这是我最好的猜测的答案。以下脚本将创建一个包含三个窗口的新tmux会话:

  • shell会话从默认目录开始(您的主目录,如果未设置)
  • 从/ tmp开始的shell会话
  • vi在您的主目录中的.bashrc文件上

将以下内容放在一个文件中,保存并运行它:

tmux new-session -s foo -d
tmux new-window -c /tmp
tmux new-window 'vi ~/.bashrc'

然后,您可以使用以下命令附加到会话:

$ tmux attach -t foo

你可以自动化许多很多东西,并且对一些命令有许多细微差别(c.f.tmux new-window 'vi ~/.bashrc' vs. tmux new-window vi ~/.bashrc)。


0
投票

我已经找到了答案。这是我用于启动带有5个窗口的Tmux会话的脚本,每个窗口运行几个独立的命令:

tmux new-session -d -s real

## Create the windows on which each node or .launch file is going to run
tmux send-keys -t real 'tmux new-window -n NAME1 ' ENTER
tmux send-keys -t real 'tmux new-window -n NAME2 ' ENTER
tmux send-keys -t real 'tmux new-window -n NAME3 ' ENTER
tmux send-keys -t real 'tmux new-window -n NAME4 ' ENTER
tmux send-keys -t real 'tmux new-window -n NAME5 ' ENTER
tmux send-keys -t real 'tmux new-window -n NAME6 ' ENTER

## Send the command to each window from window 0
# NAME1
tmux send-keys -t real "tmux send-keys -t NAME1 'COMMAND' ENTER" ENTER
# NAME2
tmux send-keys -t real "tmux send-keys -t NAME2 'COMMAND' ENTER" ENTER
# NAME3
tmux send-keys -t real "tmux send-keys -t NAME3 'COMMAND' ENTER" ENTER
# NAME4
tmux send-keys -t real "tmux send-keys -t NAME4 'COMMAND' ENTER" ENTER
# NAME5
tmux send-keys -t real "tmux send-keys -t NAME5 'COMMAND' ENTER" ENTER
# NAME6
tmux send-keys -t real "tmux send-keys -t NAME6 'COMMAND' ENTER" ENTER

## Start a new line on window 0
tmux send-keys -t real ENTER

## Attach to session
tmux send-keys -t real "tmux select-window -t NAME5" ENTER
tmux attach -t real

所以这段代码实际上创建了6个窗口,因为第一个用于向其他窗口发送命令。最后我选择了窗口5,这样当我连接它时会显示窗口5

© www.soinside.com 2019 - 2024. All rights reserved.