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

标签 linux bash ros tmux gnu-screen

我有一个运行良好的 .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 个窗口并在每个窗口上运行 5 组不同命令的方式为 Tmux 编写 bash 脚本?所有命令都是非结束的,即它们不会结束运行。这就是为什么我需要打开几个窗口。

我已经在 Internet 的每个角落搜索了答案,但通常运行所需的命令已完成,在我的情况下,我在其他答案中看到的代码不适用。

如果您需要更多信息,请询问。我希望我已经足够清楚了。

最佳答案

我已经找到答案了。 这是我为使用 5 个窗口启动 Tmux session 而编写的脚本,每个窗口运行几个独立的命令:

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

关于linux - 如何使用 bash 脚本在使用 Tmux 的 Linux 上运行多个非结束命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765692/

相关文章:

linux - 我正在尝试 grep 文件夹并为结果创建一个变量以供进一步需要

linux - Hive 获取超过平均值 10000 的行

linux - 系统无法进入运行级别 0

linux - 尝试部署 Firebase 功能时找不到模块 'firebase-admin'

linux - shell 脚本无法使用 grep 值设置环境变量

string - 如何在 awk 表达式中使用变量

python - 使用 Python、ROS 和 C++ 进行日志记录

linux - 如何在将 "tee"与管道一起使用时将标准错误写入文件?

python - ROS:ZeroMQ 是否更适合大数据流,例如原始图像,而不是原生图像主题?

c - 在 ROS 包中链接外部头文件