shell重定向调试信息
shell重定向调试信息
**************************************************************************************************************************************
作 者:fulinux
转载声明:http://blog.csdn.net/fulinus/article/details/29912333
**************************************************************************************************************************************
背景:移植wifi时,想实现启动后就能通过wifi上网,主要是通过脚本实现。开机启动时运行/etc/inittab脚本, 再调用/etc/init.d/rcS脚本,rcS脚本会依次运行/etc/init.d/文件夹下以Sxx开头的脚本文件,当中S01_network脚本文件是我们须要用到的。S01_network脚本部分内容例如以下:
#!/bin/sh
# FILE:/etc/init.d/S01_network
。。 。 if [ -d /sys/class/net/$DEVICE/ ] ; then
/apps/tools/ifup-wlan $i
route del default dev eth0
route add default gw 192.168.1.1
fi
。。。
S01_network脚本会调用/apps/tools/ifup-wlan脚本。
ifup-wlan脚本部分内容例如以下:
#!/bin/sh
# FILE:/usr/sbin/ifup-wlan0
。。 。
#Start wpa_supplicant to work now
mkdir -p /var/run/wpa_supplicant
/apps/tools/wpa_supplicant -B -Dwext -i$DEVICE -c${network_cfg_dir}/wpa_supplicant.conf
。 。 。
能够说上面全部脚本都没有错,由于我直接运行rcS脚本后会正常运行后面的全部脚本,运行后正常连接wifi路由器,例如以下:
[root@TQ2440 /etc/init.d]#iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:"fulinus"
Mode:Managed Frequency:2.437 GHz Access Point: 94:0C:6D:4F:BD:C8
Bit Rate=1 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
Link Quality=70/70 Signal level=-21 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
可是却有一个问题。开机并不能实现wifi上网。启动后我发现根本没有连上wifi路由器。例如以下:
[root@TQ2440 ~]#iwconfig wlan0
wlan0 IEEE 802.11bg ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
这就非常奇怪了。问题不好找。于是在郭工的意见下我開始通过重定向打印脚本的调试信息。
第一步。定位S01_network脚本。看看问题是不是在这里,于是我在S01_network脚本開始位置和结束位置增加例如以下设置:
#!/bin/sh
。。。
set -x
#脚本的主要内容
set +x
。 。。
而且在rcS文件里增加例如以下红颜色的设置:
#!/bin/sh if [ ! -f "/var/log/rcS.log" ]; then
touch /var/log/rcS.log
fi for i in /etc/init.d/S?? * ; do
$i >> /var/log/rcS.log 2>&1
done
启动后我们在/var/log/rcS.log日志文件里看到例如以下信息:
[root@TQ2440 /etc/init.d]#cat /var/log/rcS.log
+ [ ! -f ]
+ touch /var/log/ifup-wlan.log
+ log=/var/log/ifup-wlan.log
+ [ -z ]
+ export network_cfg_dir=/etc/network
+ cd /etc/network
+ sed -e /ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}
+ ls ifcfg-wlan0
+ sed s/ //
+ sort -k 1,1 -k 2n
+ interfaces=wlan0
+ ifconfig lo 127.0.0.1
+ [ -z wlan0 ]
+ unset DEVICE TYPE
+ fgrep DEVICE= ifcfg-wlan0
+ eval DEVICE=wlan0
+ DEVICE=wlan0
+ fgrep TYPE= ifcfg-wlan0
+ eval TYPE=WLAN
+ TYPE=WLAN
+ [ -z wlan0 ]
+ egrep -L ^ONBOOT=['"]?[Nn][Oo]['"]? ifcfg-wlan0
+ [ WLAN = Ethernet ]
+ [ WLAN = PPP ]
+ [ WLAN = WLAN ]
+ [ -d /sys/class/net/wlan0/ ]
+ /etc/network/ifup-wlan wlan0
+ route del default dev eth0
route: SIOCDELRT: No such process
+ route add default gw 192.168.1.1
+ set +x
+ [ ! -f ]
+ touch /var/log/ifup-wlan.log
+ log=/var/log/ifup-wlan.log
+ [ -z ]
+ export network_cfg_dir=/etc/network
+ cd /etc/network
+ ls ifcfg-wlan0
+ sed -e /ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}
+ sed s/ //
+ sort -k 1,1 -k 2n
+ interfaces=wlan0
+ ifconfig lo 127.0.0.1
+ [ -z wlan0 ]
+ unset DEVICE TYPE
+ fgrep DEVICE= ifcfg-wlan0
+ eval DEVICE=wlan0
+ DEVICE=wlan0
+ fgrep TYPE= ifcfg-wlan0
+ eval TYPE=WLAN
+ TYPE=WLAN
+ [ -z wlan0 ]
+ egrep -L ^ONBOOT=['"]?[Nn][Oo]['"]? ifcfg-wlan0
+ [ WLAN = Ethernet ]
+ [ WLAN = PPP ]
+ [ WLAN = WLAN ]
+ [ -d /sys/class/net/wlan0/ ]
+ /etc/network/ifup-wlan wlan0
并没有发现什么问题。
第二步,開始定位ifup-wlan脚本文件是否有问题。并做了相似上面的改动。
#!/bin/sh
if [ ! -f "$log" ]; then
touch /var/log/ifup-wlan.log
log=/var/log/ifup-wlan.log
fi
。。。
$network_cfg_dir/ifup-wlan $i >> ${log} 2>&1
。。。
启动后查看/var/log/ifup-wlan.log文件,看到如信息:
[root@TQ2440 /etc/init.d]#cat /var/log/ifup-wlan.log
。。。
+ /apps/tools/wpa_supplicant -B -Dwext -iwlan0 -c/etc/network/wpa_supplicant.conf
/apps/tools/wpa_supplicant: can't load library 'libnl.so.1'
。。。
也就是说,在运行wpa_supplicant程序时,没有找到libnl.so.1库文件。问题就出在这里。
于是,我又在/apps/tools/wpa_supplicant -B -Dwext -iwlan0 -c/etc/network/wpa_supplicant.conf这个命令前增加export发现:
+ export
export HOME='/'
export OLDPWD='/etc/network'
export PATH='/sbin:/usr/sbin:/bin:/usr/bin'
export PWD='/etc/network'
export SHELL='/bin/sh'
export TERM='vt102'
export USER='root'
export network_cfg_dir='/etc/network'
+ /apps/tools/wpa_supplicant -B -Dwext -iwlan0 -c/etc/network/wpa_supplicant.conf
/apps/tools/wpa_supplicant: can't load library 'libnl.so.1'
这个和我在终端上运行export命令看到的结果不一样:
[root@TQ2440 ~]#export
export DMALLOC_OPTIONS='debug=0x34f47d83,inter=100,log=logfile'
export EDITOR='/bin/vi'
export HISTFILESIZE='1000'
export HISTSIZE='1000'
export HOME='/'
export HOSTNAME='TQ2440'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/apps/tslib/lib:/apps/lib'
export LOGNAME='root'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/apps/bin:/apps/tools:/apps/tslib/bin:'
export PS1='[\u@\h \w]#'
export PWD='/'
export QT_QWS_FONTDIR='/apps/lib/fonts'
export QWS_MOUSE_PROTO='tslib:/dev/event1'
export SHELL='/bin/sh'
export TERM='vt100'
export TSLIB_CALIBFILE='/etc/pointercal'
export TSLIB_CONFFILE='/apps/tslib/etc/ts.conf'
export TSLIB_CONSOLEDEVICE='none'
export TSLIB_PLUGINDIR='/apps/tslib/lib/ts'
export TSLIB_ROOT='/apps/tslib'
export TSLIB_TSDEVICE='/dev/event1'
export USER='root'
export VAR1=''
export VAR2=''
export VAR3=''
export VAR4=''
export VAR5=''
这些环境变量是在profile文件里设置的,原来当登录后。Init进程会分配给你一个shell,这个shell才会读/etc/profile这个脚本作为环境变量。因此没有登录就不会有使能profile文件。
解决方法:
在ifup-wlan脚本的这个位置增加红颜色的语句。
export LD_LIBRARY_PATH=/lib:/usr/lib:$TSLIB_ROOT/lib:/apps/lib
/apps/tools/wpa_supplicant -B -Dwext -i$DEVICE -c${network_cfg_dir}/wpa_supplicant.conf
就是将缺少的这个libnl库的路径增加到库路径的环境变量中。
运行一遍后,wifi就已经连接上了。
shell重定向调试信息的更多相关文章
- shell输出调试信息
[shell输出调试信息] 1.使用trap命令 trap命令用于捕获指定的信号并执行预定义的命令. 其基本的语法是: trap 'command' signal 其中signal是要捕获的信号,co ...
- linux输出信息调试信息重定向
最近在做一个android系统移植的项目,所使用的开发板com1是调试串口,就是说会有uboot和kernel的调试信息打印在com1上(ttySAC0).因为后期要使用ttySAC0作为上层应用通信 ...
- shell脚本调试
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟 ...
- 【转】Linux Shell脚本调试技术
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 本文全面系统地介绍了shell脚本调试技 ...
- shell脚本调试技术_转
转自:http://itlab.idcquan.com/linux/SHELL/727128.html 参考:https://linux.cn/article-8045-1.html 本文全面系统地介 ...
- 【转】shell脚本调试(bash trap support bashdb )
原文网址:http://zhu8337797.blog.163.com/blog/static/170617549201122512712136/ 命 令 选 项 功 能 bash –x 脚本名 回显 ...
- Shell脚本调试技术
http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟练掌握 ...
- Linux Shell 程序调试
Linux Shell 程序调试 Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”.当然,用户也可以在she ...
- Linux Shell 脚本调试
方法如下所示:(1) 使用选项–x,启用shell脚本的跟踪调试功能: $ bash -x script.sh 运行带有-x标志的脚本可以打印出所执行的每一行命令以及当前状态.注意,你也可以使用sh ...
随机推荐
- storm - 使用过程中的一点思考
引子 这几天为了优化原有的数据处理框架,比较系统的学习了storm的一些内容,整理一下心得 1. storm提供的是一种数据处理思想,它不提供具体的解决方案 storm的核心是topo的定义,而top ...
- UVa 1605 (构造) Building for UN
题意: 有n个国家,要设计一栋长方体的大楼,使得每个单位方格都属于其中一个国家,而且每个国家都要和其他国家相邻. 分析: 紫书上有一种很巧妙的构造方法: 一共有2层,每层n×n.一层是每行一个国家,另 ...
- UVA 753 A Plug for UNIX 电器插座(最大基数匹配,网络流)
题意: 给n个插座,m个设备(肯定要插电了),k种转换头可无限次使用(注意是单向的),问有多少设备最终是不能够插上插座的? 分析: 看起来就是设备匹配插座,所以答案不超过m.这个题适合用网络流来解. ...
- 新功能:Azure 负载平衡器的空闲超时现可配置了
Yves Pitsch Azure 网络首席项目经理 我们很高兴地宣布,Azure负载平衡器现在可以为云服务和虚拟机提供可配置的 TCP空闲超时支持.要配置此功能,可以使用服务管理 API.Power ...
- 【转】跟着开涛学SpringMVC
跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC 源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...
- Gradle使用手册(二):项目结构
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Using-sourceCompatibility-1. ...
- (转载)C++lambda表达式
(转载)http://www.cnblogs.com/L-hq815/archive/2012/08/23/2653002.html lambda表达式 C++ 语言中的lambda表达式在很多情况下 ...
- java泛型小总结
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 《深入Java虚拟机学习笔记》- 第3章 安全
3.1为什么需要安全性 Java的安全模型是其多个重要结构特点之一,它使Java成为适于网络环境的技术.因为网络提供了一条攻击连人的计算机的潜在途径,因此安全性是非常重要的.Java安全模型侧重于保护 ...
- Inf2Cat, signability test failed.
驱动开发真不是那么好玩的,折腾了几天,排除了几个错误,又有新的错误了. 错误 1 error -2: "Inf2Cat, signability test failed.&quo ...