如何在多个终端中执行多个语句? (Linux,Bash)

时间:2015-02-08 13:57:05

标签: linux bash shell automation ros

我试图编写一个打开3个终端窗口并在这些窗口中运行几个语句的脚本。但它不起作用。我尝试过使用&&运营商以及" "但是我无法让它发挥作用。我也尝试过同一行以及彼此之下的陈述。我收到的错误是cd子进程无法执行,说明没有这样的目录。但目录〜/ Projects / catkin_ws是正确的。

#!/bin/bash
# ROS opstarten
gnome-terminal -e cd ~/Projects/catkin_ws source devel/setup.bash roscore

# gazebo opstarten
gnome-terminal -e cd ~/Projects/catkin_ws 
source devel/setup.bash
roslaunch cvg_sim_gazebo Qr_Chessboard.launch

# programma opstarten
gnome-terminal -e cd ~/Projects/catkin_ws
source devel/setup.bash
/usr/bin/python /home/user/Projects/catkin_ws/src/drone7_project/src/drone_program.py

3 个答案:

答案 0 :(得分:1)

如果你真的想以编程方式在不同的终端上运行它们,你可以使用终端多路复用器,例如GNU屏幕。

首先你必须开始一个会议:

$ screen -S demo

然后使用Ctrl-a c打开其中所需的所有终端并根据需要配置其环境,然后您可以使用" -X stuff&#从脚本向任何屏幕页面(选项卡)发送命令34;选项(将字符填充到虚拟屏幕终端):

$ screen -S demo -p <page_number> -X stuff 'ls -l
'

请注意,您还必须发送换行符才能真正输入命令。

答案 1 :(得分:1)

我尝试将主要环境路径添加到bash,然后成功在另一个终端中运行roscore。

#!/bin/bash
# ROS opstarten
PATH=/opt/ros/kinetic/bin

gnome-terminal --tab -e /opt/ros/kinetic/bin/roscore

答案 2 :(得分:0)

您需要引用语句并在它们之间使用语句分隔符。

gnome-terminal -e 'cd ~/Projects/catkin_ws; source devel/setup.bash; /usr/bin/python /home/user/Projects/catkin_ws/src/drone7_project/src/drone_program.py'

或者使用换行符作为语句分隔符

gnome-terminal -e 'cd ~/Projects/catkin_ws
    source devel/setup.bash
    /usr/bin/python /home/user/Projects/catkin_ws/src/drone7_project/src/drone_program.py'

但是,在单独的终端中运行这些命令似乎是错误的。为什么不在当前终端中将它们作为常规后台作业运行并输出到文件?