实例
touch hotel_robot.sh
gedit ./hotel_robot.sh
hotel_robot.sh中内容如下:
#!/bin/bash
# --- for every Terminal-tab
source ~/.bashrc # load ~/.bashrc setup
source /mnt/hgfs/linux_share/ros_project/home_robot_ws/devel/setup.bash # ros workspace
{
gnome-terminal --tab "XXD_ros" -- bash -c "roscore;exec bash"
}&
sleep 2s
{
gnome-terminal --tab "XXD_demo" -- bash -c "roslaunch home_robot_moveit_config demo.launch;exec bash"
}&
sleep 4s
{
gnome-terminal --tab "XXD_fk" -- bash -c "rosrun hr_task_planning plan_arm_fk_node;exec bash"
# gnome-terminal --tab "XXD_ros" -- bash -c 'export RUN_AFTER_BASHRC="rosrun hr_task_planning plan_arm_fk_node;exec bash"'
}&
sleep 2s
{
gnome-terminal --tab "XXD_imu" -- bash -c "rostopic echo /joint_states;exec bash"
}
赋予执行权限
sudo chmod 777 *
运行
./hotel_robot.sh
gnome-terminal使用介绍
基础用法见:
gnome-terminal使用_ZONGXP的博客-优快云博客_gnome-terminal
废弃命令提示:
-x和-e已经被弃用了,所以取而代之的是 - -符号,还有就是 bach -c这条命令,因为是在新启动的终端里执行bash -c,即启动子shell,所以总体的代码就应该如下:
gnome-terminal --tab -- bash -c "_bash_cmd;exec bash"
这里的&符号是&切换到后台运行,防止阻塞当前进程的,让进程异步执行。由此可知shell也是多进程模型,而js脚本是单进程模型。
示例:
gnome-terminal --tab -- bash -c "ifconfig;exec bash"
gnome-terminal --tab -- bash -c "ls;exec bash"
使用.bashrc中的配置
1. 需要注意的是,gnome-terminal --tab -- bash -c "_bash_cmd;exec bash" 执行的命令,是在调用 .bashrc 之前的,所有 .bashrc 的所有配置都无效,如果需要用到.bashrc里面的内容,有个变通的办法,在.bashrc最后加上一句
--------------------.bashrc--------------------
其他内容
#最后加上这句
evel "$RUN_AFTER_BASHRC"
-----------------------------------------------
然后在写命令的时候,修改RUN_AFTER_BASHRC这个变量,就可以实现让.bashrc调用这个命令
$ gnome-terminal -- bash -c 'export RUN_AFTER_BASHRC="_bash_cmd_"; exec bash'
这样虽然可以先加载.bashrc配置,再执行_bas_cmd_指令,但由于.bashrc的加载默认是在后台运行的,_bas_cmd_也会在后台运行,打印输出无法查看。
2. 如在.sh文件中,启动多个终端和程序,可以显式加载.bashrc配置
#!/bin/bash
# --- for every Terminal-tab
source ~/.bashrc # load ~/.bashrc setup
# --- other _bash_cmd
参考
在ubuntu/linux下利用qt启动终端并执行命令/执行外部程序或者脚本/gnome-termianl使用,gnome-terminal -x弃用_世纪末的魔术师的博客-优快云博客