当前位置: 首页 > news >正文

嵌入式开发场景中Shell脚本执行方式的对比

Shell脚本执行方式对比表

执行方式命令示例是否需要执行权限是否启动子Shell环境变量影响范围适用场景嵌入式开发中的典型应用
直接执行脚本./script.sh子Shell内有效独立运行的脚本,需固定环境自动化构建脚本(如编译固件)
指定解释器执行bash script.sh子Shell内有效快速测试、无需权限的调试临时调试设备日志分析脚本
source 或 . 执行source script.sh当前Shell全局有效加载环境变量、定义函数/别名初始化交叉编译环境(如设置PATH
全局调用(PATH)script.sh(需在PATH中)子Shell内有效频繁使用的工具脚本部署到设备中的常用工具脚本
输入重定向/管道bash < script.sh子Shell内有效动态生成脚本内容或临时执行通过SSH发送脚本到嵌入式设备执行

各执行方式详解及嵌入式场景说明

1. ‌直接执行脚本
  • 嵌入式应用‌:
    在自动化构建时(如通过Jenkins),直接运行编译脚本生成固件:
./build_firmware.sh
  • 注意‌:
    • 需在脚本第一行指定正确的shebang(如#!/bin/bash)。
    • 嵌入式设备可能使用精简Shell(如dash),需测试兼容性。
2. ‌指定解释器执行
  • 嵌入式应用‌:
    临时调试时,直接通过解释器运行脚本(无需修改权限):
sh analyze_logs.sh  # 设备可能默认使用`sh`而非`bash`
  • 注意‌:
    • 嵌入式设备的Shell可能是busybox ash,需注意语法兼容性。
3. ‌source 执行(关键场景)
  • 嵌入式应用‌:
    初始化交叉编译工具链环境变量(变量需全局生效):
source setup_toolchain.sh  # 脚本内容:export PATH="/opt/arm-gcc/bin:$PATH"
  • 注意‌:
    • 必须用source‌,否则变量仅在子Shell生效,编译时会提示找不到工具链。
4. ‌全局调用(PATH)
  • 嵌入式应用‌:
    将常用脚本(如设备重启脚本)放入/usr/local/bin
reboot_device  # 直接调用,无需路径

注意‌:

  • 嵌入式设备存储空间有限,避免添加过多全局脚本
5. ‌输入重定向/管道
  • 嵌入式应用‌:
    通过SSH远程执行嵌入式设备中的临时脚本:
echo "ls /etc" | ssh root@192.168.1.100  # 直接执行单行命令
  • 注意‌:
    • 适用于资源受限设备,无需存储脚本文件。

嵌入式开发中推荐使用 source 的场景

场景原因
配置交叉编译环境需要将工具链路径(如ARM_TOOLCHAIN)持久化到当前Shell环境,供后续编译使用。
加载设备驱动模块脚本中包含insmod加载驱动命令,需直接作用于当前系统环境。
定义调试函数/别名快速调用设备调试命令(如alias logdump="dmesg | grep ERROR")。

总结

  • 优先使用 source‌:在需要‌环境变量或命令持久化‌时(如初始化开发环境)。
  • 直接执行脚本‌:适用于‌独立任务‌(如编译、打包)。
  • 注意Shell兼容性‌:嵌入式设备可能使用ashdash,需测试脚本语法。

相关文章:

  • [ComfyUI] ComfyUI-Custom-Scripts 插件介绍与优化功能解析
  • Nginx多域名HTTPS配置全攻略:从证书生成到客户端安装
  • 什么是项目可行性研究中的辅助(功能)研究?
  • MySQL高级语句深度解析与应用实践
  • 时尚界正在试图用AI,创造更多冲击力
  • C语言基础:第10天笔记
  • LeetCode 2711.对角线上不同值的数量差:O(mn)时间O(1)空间 - 位运算优化 - C++/Go双百版本 - 三种方法(一步步优化)
  • Axios核心原理
  • Python与文件——保存文件
  • 微软Copilot与向量数据库:智能化办公的技术架构与实现路径
  • 李宏毅机器学习笔记(1)—机器学习基本概念+深度学习基本概念
  • 软件工程面试题(六)
  • 解决linux centos ubuntu等无法启动谷歌chrome浏览器问题
  • HarmonyOS NEXT——【鸿蒙相册图片以及文件上传Picker封装】
  • Stereolabs ZED Box Mini:NVIDIA Orin™驱动,双GMSL2输入,智能机器视觉AI新选择”
  • android studio调试aosp手机userdebug版本无法查看局部变量和参数问题如何解决?
  • 【从零实现Json-Rpc框架】- 项目实现 -抽象消息类实现篇
  • Uni-app入门到精通:subPackages节点为小程序的分包加载配置
  • 实现金蝶与钉钉无缝对接以高效管理银行账号信息
  • 人脸识别新规落地,“多模态认证”将成常态
  • 男子恶意遗弃幼子获刑,最高法发布涉未成年人家庭保护典型案例
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”
  • 中国女足将于5月17日至6月2日赴美国集训并参加邀请赛
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号