用mdev使U盘中的脚本自动执行

原创 2015年11月21日 15:18:10

这并不是什么先进技术,mdev、udev是Linux已经使用多年的热插拔通知方案,但我想说的是,作为一个初学者,想实现自己的想法并不是那么容易。其实我写脚本已不是一次两次了,但每次写脚本都要费很长时间,总结原因有几点:

1、脚本不像编译语言,没有编译器帮你在执行前发现语法层的错误,只能运行时发现。

2、脚本调试不方便,基本只能靠echo打印得知变量的值或者程序运行到哪,虽然有可以在开头加-xv自动打印每一步的情况,但脚本一大或者变量复杂的话,打印的信息太多,也不好定位。关键是有些情况系就是打印不出信息,这就真没辙了。

3、背景知识需要太多,而且没有像ANSI C库函数一样的全面介绍命令的书(至少我还没找到),加上有很多命令用法复杂,参数变化多样,命令命名不规范,不好猜,使得初学者处处碰壁,虽然man可以告诉我们很多信息,但是必须是知道有这个命令的前提下,如果压根就不知道有这个命令,man实在没什么用。尤其是该死的正则表达式,规则复杂还经常用,简直是初学者的天敌。还有那/proc里的东西,我就想知道那本书里将它?!

4、消息封锁。google上不去,要么翻墙,还没有稳定、免费的翻墙法,baidu又不争气,找到的文章基本千篇一律。zf屏蔽google简直就是阻碍科学发展!

我就为实现一个像Windows中的autorun一样的功能,花了3天的时间,于是决心写此文记录。

mdev我就不多介绍了,网上有的是。让它执行一个脚本的方法也很简单,传统的做法是在/etc/mdev.conf中添加如下语句:

sd[a-z][0-9] 0:6 0660*/etc/automount.sh

这里的*可以换成@,表示只有插上u盘时执行/etc/automount.sh,当然,这样就需要配合$,表示卸载U盘时执行什么脚本。这都不重要,关键是/etc/automount.sh的写法。

#!/bin/sh

destdir=/udisk
app=myscript
#echo "$0 $ACTION $MDEV"

my_umount()
{
umount "$destdir";
rmdir "$destdir"
}

my_mount()
{
mkdir "$destdir" || true
  mount -t vfat -o sync -o noatime -o nodiratime "/dev/$1" "$destdir" || true
}

run_script()
{
HACKPATH=${destdir}/$1
if [ -e $HACKPATH ]; then
/bin/chmod u+x $HAKPATH 2>&1
exec $HACKPATH &
fi
}

kill_script()
{
  NAME=$1
#  echo $NAME
  ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $1}'`#网上都是print $2,但我试的就是$1
  echo $ID
  for id in $ID
  do
  pkill -P $id #这个命令用于干掉所有因NAME引发的进程
#  echo "killed $id"
  done
}

case "${ACTION}" in
remove)
        my_umount        
        kill_script $app
        ;;
add|"")
echo "i'm in ${ACTION}"#不知为什么,这里就是打印不出来
my_mount ${MDEV}
run_script $app
;;
esac

剩下的事你也应该知道了,在U盘里放一个myscript文件,里面写着你要执行的脚本,注意添加可执行权限。当你插上U盘时就会自动执行你的脚本了。

这里还有一些不足,就是拔出u盘时总是umount失败,但我始终找不到原因,还请过路的大神指教,在此先谢过。

相关文章推荐

linux arm上实现插入U盘自动运行的设计

前言之前写过在ubuntu上实现插入U盘自动运行的程序,即autorun,但是在arm 上并不能实现。即仅仅是修改U盘上的文件或者权限,无法提供插入u盘时自动运行这个效果。在嵌入式编程的一个思路是,修...

嵌入式Linux用mdev实现U盘自动挂载

在ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程 序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是...

mdev的使用方法和原理以及实现U盘或SD卡的自动挂载

udev实现U盘或SD卡的自动挂载,在这里我们再说一下怎样用mdev实现这个功能。mdev的使用在busybox中的mdev.txt文档已经将得很详细了。   mdev是busybox中的一个ud...

用脚本将指定文件移入到U盘中

因为每次编译完软件都要将生成的bin文件放入到U盘对板卡进行升级。后来觉得这个是重复劳动,因此就想用脚本实现这个。因此上网进行查找。 参考文档:http://www.bathome.net/threa...

mdev自动加载u盘和sd卡

1 用busybox制作根文件系统的时候,要选择支持mdev机制     Linux System Utilities  --->                   [*] mdev    ...

嵌入式Linux用mdev实现U盘自动挂载

ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是实现的步骤: ...

把Ubuntu安装到U盘中遇到的问题

如果您通过搜索引擎搜索到此文,注意,请本文不是说怎么用U盘给电脑安装ubuntu,是把系统安装在U盘里,U盘就是我的电脑。...

U盘中保存的文件丢失后还能恢复吗

U盘中保存的文件丢失后还能恢复吗 众所周知,U盘在带给我们高质高效的享受同时,它也隐藏着数据丢失的危险。万能的U盘有时也并不万能。一旦U盘出现问题,由此而引发的重要资料信息丢失,后果将不堪设...

如何将ubuntu安装到U盘中

如何将ubuntu安装到U盘中?Ubuntu是新一代的Linux操作系统,相比其他发行版本的linux上手非常容易。图型接口漂亮,必要的功能俱全。最重要的是,它完全免费,不光是操作系统,连用软件都不必...

我U盘中的efi manager

refind,用于管理efi启动,简单方便实用,界面美观,配合efi shell,UEFI启动超级容易。安装 官网:http://www.rodsbooks.com/refind/ 在官网中可以下载到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用mdev使U盘中的脚本自动执行
举报原因:
原因补充:

(最多只允许输入30个字)