IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Ubuntu sh文件编写,开多终端,自动读取密码 -> 正文阅读

[系统运维]Ubuntu sh文件编写,开多终端,自动读取密码

Ubuntu sh文件编写,开多终端,自动读取密码

在最近的项目调试中经常需要开多个终端启动多个launch,这样的操作多了难免会感到烦躁并且时间一长再回去使用一些功能包的时候就会忘记需要启动哪些文件,因此我特意学了一手如果编写sh开启多个终端以及在sh文件中使用sudo命令自动读取密码

开启多个终端

以古月的mbot为例,我们要实现机器人导航,就需要开启gazebo、move_base等多个launch,一般的做法是先ctrl+alt+T开启一个终端,随后cd到文件夹中,然后进行一遍source加入环境变量,随后用roslaunch启动gazebo仿真环境,接着再ctrl+shift+T再开一个终端,但新开的终端又要重新source一遍加载环境变量,然后roslaunch加载move_base导航。这无疑会造成时间上的浪费,有这时间我都能看完一章小说了。

但如果采用sh文件,我们只需要编写4行命令就行了,如下:

#!/bin/bash
gnome-terminal --tab -- bash -c "source devel/setup.bash;roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch"
sleep 20s
gnome-terminal --tab -- bash -c "source devel/setup.bash;roslaunch mbot_navigation nav_cloister_demo.launch"

在执行编写的sh文件时最好采用的命令是:

bash xxx.sh   # 其中xxx是你sh文件的文件名

一般有人执行sh文件要么就是 ./xxx.sh 或者是 sh xxx.sh ,我试过之后发现对于上面我自己的sh文件来说是执行不通的,会报错,具体原因我没有细究,毕竟能用就行。

这边分别解释一下每一行的作用,第一行:

#!/bin/bash

类似于ubuntu中用Python文件需要在最顶部加上# coding=utf-8,具体不用细究,看第二行:

gnome-terminal --tab -- bash -c "source devel/setup.bash;roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch"

其中 gnome_terminal --tab – bash -c 就是开启一个新终端,然后在新终端中需要输入的命令为引号中的内容,其中每一个分号代表一个命令,比如source devel/setup.bash就是加载环境变量,这个时候分号的作用就类似于暂停符,只有执行完这个命令了,才会继续执行下面的roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch,打开gazebo。这里需要注意的是如果执行某个命令报错了,那么新终端会自动关闭,就相当与闪退,所以如果当你启动sh文件但是发现没有新的终端启动,你应该找的是自己文件是否有问题。

第三行:

sleep 20s

很明显,这里的意思就是执行到这一行后先停止20秒,原因是在开启gazebo的时候有时候快有时候慢,但过慢会导致当gazebo还没有启动成功就开起了move_base导航,导致后续的nav_cloister_demo.launch报错,所以这里的时间可以给长一点,当然可以自己定。

第四行:

gnome-terminal --tab -- bash -c "source devel/setup.bash;roslaunch mbot_navigation nav_cloister_demo.launch"

一样是开启一个新终端并且启动move_base导航,原理跟上面是一样的。然后回顾这四行命令我们可以猜到,到目前为止一共开启了三个终端,第一个终端是人为开启的,用于执行sh文件,其它两个终端都是在执行sh文件时自动开启的。

并且我在研究时遇到了这样的一个问题,我自己写了一个python文件想创建一个功能包并写一个launch文件执行这个python文件,但由于是脚本文件,它本身修改完是不需要编译的,而且我的launch文件一直有问题,那么这个时候我就把python文件的执行也放入了sh文件中,也就是下面这行命令:

gnome-terminal --tab -- bash -c "cd src/planner_mycode/src;python main.py"

所以我又新开了一个终端专门用来执行python文件,这也是一个好方法。

自动读取密码

同时在sh文件中有时我们需要权限,免不了采用sudo执行某个命令,比如开启一个串口权限,假设为:

sudo chmod 777 /dev/ttyUSB0

这里并不是简单的编写下面这种sh文件就行了:

#!/bin/bash
sudo apt-get update
password

其中password是你的密码,因为它在执行到第二行的时候会等你输入完密码再执行到 password这一行,说白了就还是要人为输入密码,那这边介绍一种自动读取密码的功能:

#!/bin/bash
sudo -S apt-get update << EOF
password
EOF

首先在sudo后面要加上-S,具体原因不详细阐述,然后是两个小于号加EOF,这里的意思就相当于当执行到EOF这里时,后续的输入会作为子命令,直到遇到第二个EOF为止,所以这里的 password就是sudo -S apt-get update的子命令,也就是密码。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:10:24  更:2022-07-03 11:10:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:43:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码