赶紧去学shell语法,简单的东西都不学你要学什么?
一、QT自启动脚本
ubuntu自启动shell脚本运行qt的c++文件
项目文件为 first ,编译,然后运行,然后检测是否有进程产生
流程:
创建并编辑一个名为“run.sh”的Shell脚本文件
gedit run.sh
并添加以下内容:
#!/bin/bash
echo "Start vision code"
cd /home/ldy/programs/build-first-Desktop_Qt_5_14_2_GCC_64bit-Debug
make clean && make -j
./first
请注意,您需要将“cd /home/ldy/programs/build-first-Desktop_Qt_5_14_2_GCC_64bit-Debug ”替换为您的c++项目的Debug文件路径,first为项目的名称。
echo为在终端输出提示文字,make clean 是清除文件 ,make -j 是编译文件, ./first是运行工程文件
保存并关闭“run.sh”文件。
- ctrl + o: 保存内容(但是不会退出,还可以继续编辑)
- ctrl + x: 保存并且退出。 按y保存到缓冲区,然后按回车键退出。
授予“run.sh
”文件可执行权限。
在终端中,使用以下命令:
chmod 777 run.sh
运行脚本文件
./run.sh
看运行脚本后C++文件是否有输出,有输出说明脚本没问题
开机自启动运行脚本
打开ubuntu自带的应用:启动应用程序,然后添加 自启动程序,名称随便取,命令就是执行的脚本路径 ,保存 ,然后重启,看看脚本会不会自启动
如果脚本没有自启动,就到 /home/用户名/.config/autostart 目录下,找到刚才自启动脚本的名称,如run.sh.desktop 。然后双击进入修改 ,把 Exec=/home/用户名/run.sh 改成 Exec= /bin/bash /home/用户名/run.sh
开机自启动后如何关闭当前脚本的运行
执行终端命令
pkill run.sh
pkill first #关闭代码运行
如何关闭不了,就强制关闭运行的脚本
pkill -9 -f run.sh
pkill first
如何取消脚本开机自启动
在 启动应用程序 中 取消勾选 或 删除run.sh.desktop文件,或去删除run.sh都行
视觉自启动
echo "Start vision code"
src=3
cnt=0
name=Vision_optimize
cd /home/eihu/Vision_Optimize/build-uVision_optimize-Desktop_Qt_5_14_2_GCC_64bit-Debug/
make clean && make -j #清除,编译
while [ 1 ]
do
count=`ps -ef | grep $name | grep -v "grep" | wc -l` #返回目标进程数量(正常是2)
if [ $count -gt 1 ]; then #如果进程数>1则表示程序运行正常
sleep $src
else
gnome-terminal -x bash -c "./$name;exec bash;" #打开一个新的终端,运行程序
sleep $src #延时sec秒
((cnt=cnt+1)) #cnt自加1
if [ $cnt -gt 9 ]; then #如果cnt>9,关闭脚本
pkill -9 -f run.sh
pkill Vision_optimize
fi
fi
done
ROS2自启动脚本
echo "Start nav2 code"
cd /home/feihu/shaobing/feihu
source /opt/ros/humble/setup.bash
source /home/feihu/shaobing/feihu/src/install/setup.bash
commands=(
"gnome-terminal -- bash -c ' ros2 launch robot_description display_rviz2.launch.py ; exec bash;'"
"gnome-terminal -- bash -c ' ros2 launch pointcloud_to_laserscan pointcloud_to_laserscan_launch.py ; exec bash;'"
"gnome-terminal -- bash -c ' ros2 launch linefit_ground_segmentation_ros segmentation.launch.py ; exec bash;'"
"gnome-terminal -- bash -c ' ros2 launch imu_complementary_filter complementary_filter.launch.py ; exec bash;'"
"gnome-terminal -- bash -c ' ros2 launch livox_ros_driver2 msg_MID360_launch.py ; exec bash;'"
"gnome-terminal -- bash -c ' ros2 launch fast_lio mapping.launch.py ; exec bash;'"
#"sleep 1"
#"gnome-terminal -- bash -c 'ros2 launch robot_navigation2 navigation2.launch.py ; exec bash;'"
)
for command in "${commands[@]}"; do
eval "$command"
done
sleep 2
#单独运行决策节点,并保存终端的输出为日志
ctime=$(date +"%Y-%m-%d_%H-%M-%S")
file_name="output/${ctime}.log"
cd /home/feihu/projects/fish
source install/setup.bash
gnome-terminal -- bash -c "ros2 run decision decision > ${file_name} 2>&1; exec bash;"