嵌入式 Shell脚本执行时出现declare: not found的解决方法

当执行Shell脚本时遇到'declare: not found'的错误,可以通过更改执行方式为bash或者重新配置dash来解决。具体方案包括:使用bash执行脚本,或者创建bash到/bin/sh的软链接,以及通过dpkg-reconfigure dash进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#../gcc-4.6.3/configure --prefix=/usr/local/gcc-4.6.3 --enable-threads=posix --disable-checking --enable--long-long--with-zlib-include=/usr/src/linux-2.6.32.12-0.7-obj/x86_64/default/include/config/zlib  --with-zlib-lib=/usr/src/linux-2.6.32.12-0.7-obj/x86_64/default/include/config/zlib --enable-languages=c,c++,java

#!/bin/bash # 配置参数(可根据需要调整) PID=628 # 目标进程PID INTERVAL=1 # 采集间隔(秒) DURATION=300 # 总采集长(秒) OUTPUT_FILE="thread_data_$(date +%Y%m%d_%H%M%S).csv" # 检查ADB连接 if ! adb devices | grep -q "device$"; then echo "错误:未检测到连接的设备,请确保ADB已连接" exit 1 fi # 写入CSV表头 echo "timestamp,tid,thread_name,cpu_percent,res_kb" > "$OUTPUT_FILE" echo "开始采集PID $PID 的线程数据,持续 $DURATION 秒,输出至 $OUTPUT_FILE..." # 计算采集结束间 END=$((SECONDS + DURATION)) # 循环采集数据 while [ $SECONDS -lt $END ]; do TIMESTAMP=$(date +%s%3N) # 毫秒级间戳 # 核心改进: # 1. 用sed过滤ANSI终端控制字符(去除颜色、光标指令) # 2. 用awk提取有效行(过滤标题行、空行) # 3. 动态解析字段(通过关键字定位,避免固定索引错误) adb shell "top -H -p $PID -d 0.1 -n 1" 2>/dev/null | \ sed -r "s/\x1b\[[0-9;]*m//g" | # 移除所有ANSI控制字符 grep -vE "Threads:|Mem:|Swap:|TID|^$" | # 过滤非线程数据行 while read -r line; do # 解析行数据(处理空格分隔,提取关键字段) # 示例行格式:" 5465 system 20 0 11G 43M 15M S 15.3 0.6 5:35.65 SP:img2tensor ..." # 字段含义(按顺序):TID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ THREAD_NAME ... parts=($line) # 按空格分割为数组(自动合并连续空格) # 容错:跳过字段不足的行 if [ ${#parts[@]} -lt 12 ]; then continue fi TID=${parts[0]} CPU=${parts[8]} # %CPU在第9个位置(索引8) RES_STR=${parts[5]} # RES在第6个位置(索引5,如"43M") THREAD_NAME=${parts[11]} # 线程名在第12个位置(索引11) # 转换RES为KB(处理M/K单位,默认0) if [[ $RES_STR =~ ([0-9.]+)([MK]) ]]; then VALUE=${BASH_REMATCH[1]} UNIT=${BASH_REMATCH[2]} if [ "$UNIT" = "M" ]; then RES_KB=$(echo "$VALUE * 1024" | bc | awk '{printf "%.0f", $0}') elif [ "$UNIT" = "K" ]; then RES_KB=$(echo "$VALUE" | bc | awk '{printf "%.0f", $0}') fi else RES_KB=0 # 无效格式默认为0 fi # 写入CSV(确保字段完整) echo "$TIMESTAMP,$TID,$THREAD_NAME,$CPU,$RES_KB" >> "$OUTPUT_FILE" done sleep $INTERVAL done echo "采集完成!数据已保存至 $OUTPUT_FILE" 记录的csv一点不对 timestamp,tid,thread_name,cpu_percent,res_kb 1753787679283,4931,SP:img2tensor,0.0,27648 1753787679283,731,HwBinder:628_1,0.0,27648 1753787679283,732,HwBinder:628_2,0.0,27648 1753787679283,628,hidl_service@1. [?25h[?25h[?25h,0.0,27648 1753787680671,4931,SP:img2tensor,0.0,27648 1753787680671,731,HwBinder:628_1,0.0,27648 1753787680671,732,HwBinder:628_2,0.0,27648 1753787680671,628,hidl_service@1. [?25h[?25h[?25h,0.0,27648 1753787682043,4931,SP:img2tensor,0.0,27648 1753787682043,731,HwBinder:628_1,0.0,27648 1753787682043,732,HwBinder:628_2,0.0,27648 1753787682043,628,hidl_service@1. [?25h[?25h[?25h,0.0,27648 1753787683409,10010,hidl_service@1. ,66.6,31744 1753787683409,9996,SP:img2tensor,11.1,31744 1753787683409,9990,SP:img2tensor,7.4,31744 1753787683409,9997,SP:img2tensor,7.4,31744 1753787683409,9991,SP:img2tensor,7.4,31744 1753787683409,4931,SP:img2tensor,7.4,31744 1753787683409,9992,SP:img2tensor,3.7,31744 1753787683409,10101,streampipe/9996 ,0.0,31744 1753787683409,10022,streampipe/9991 ,0.0,31744 1753787683409,9994,SP:img2tensor,0.0,31744 1753787683409,9993,streampipe/9993 ,0.0,31744 1753787683409,9995,SP:img2tensor,0.0,31744 1753787683409,9998,stream_callback ,0.0,31744 正确的应该如下 Threads: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie Threads: 17 total, 2 running, 15 sleeping, 0 stopped, 0 zombie Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Threads: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie Mem: 7315424K total, 6904284K used, 411140K free, 8104K buffers Swap: 3969620K total, 1024K used, 3968596K free, 1888448K cached 800%cpu 314%user 2%nice 170%sys 291%idle 0%iow 20%irq 3%sirq 0%host TID USER [CPU]%CPU %MEM TIME+ THREAD PROCESS 8097 system 7 67.0 0.5 3:15.31 hidl_service@1. vendor.vt.pipeline.hidl_service@1.0-service 4931 system 3 12.0 0.5 13:38.87 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8085 system 5 11.0 0.5 0:22.39 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8084 system 5 8.0 0.5 0:23.38 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8082 system 5 8.0 0.5 0:22.42 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8087 system 5 7.0 0.5 0:22.86 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8088 system 5 6.0 0.5 0:22.73 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8083 system 5 6.0 0.5 0:22.99 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8086 system 5 6.0 0.5 0:22.55 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8081 system 5 5.0 0.5 0:22.75 SP:img2tensor vendor.vt.pipeline.hidl_service@1.0-service 8089 system 5 2.0 0.5 0:05.24 stream_callback vendor.vt.pipeline.hidl_service@1.0-service 8090 system 5 2.0 0.5 0:05.27 stream_callback vendor.vt.pipeline.hidl_service@1.0-service 8185 system 3 0.0 0.5 0:00.00 streampipe/8081 vendor.vt.pipeline.hidl_service@1.0-service 8124 system 4 0.0 0.5 0:00.00 streampipe/8083 vendor.vt.pipeline.hidl_service@1.0-service 732 system 0 0.0 0.5 0:00.41 HwBinder:628_2 vendor.vt.pipeline.hidl_service@1.0-service 731 system 4 0.0 0.5 0:00.00 HwBinder:628_1 vendor.vt.pipeline.hidl_service@1.0-service 628 system 3 0.0 0.5 0:00.47 hidl_service@1. vendor.vt.pipeline.hidl_service@1.0-service
最新发布
07-30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值