在连接USB设备时运行脚本


13

请不要将此标记为重复,因为这是另一个问题!

每当Pendrive连接到我的系统时,我都试图运行脚本。我遵循了这个问题,这个问题已经解决了,但仍然存在一些问题。

这是我的udev规则文件:

ACTION=="add", ATTRS{idVendor}=="8564", ATTRS{idProduct}=="1000", RUN+="/usr/local/my_script.sh"

这是我的脚本:

#!/ bin / bash

env> /tmp/env.out
cp -r / media / *设备名称* / *〜/ test /

我有两个问题:

1.每当我插入USB设备脚本时,都会执行该脚本,因为在/ tmp中生成了一个env.out文件,但是USB设备中数据没有复制到测试目录中,如果我手动运行该脚本,它将正常工作!为什么??

2.如何使我的规则文件更通用,以便它可以在不知道其ID的情况下适用于已连接的任何USB设备?

我的想法是在连接时将所有数据从连接的USB设备自动复制到我的计算机。

提前致谢!


你不只是想这样做吗?askubuntu.com/questions/474/...
virtualxtc

@virtualxtc感谢您的建议!但是我想知道这种方法有什么问题?
空指针

您能告诉我我的脚本出了什么问题吗?为什么不起作用?
空指针

另外,请注意-我已经学会了很难的方法,例如askubuntu这样的特定问题通常更适合于超级用户。
virtualxtc 2014年

如果这是权限问题,那么当我尝试手动运行它时就会显示出来,不是吗?
空指针

Answers:


8

要回答我自己的问题:

1.脚本未运行,因为它需要sudo运行权限。

解决方案:

使此脚本sudo可执行!

使用以下命令编辑sudoers文件

sudo visudo

在第25行(即%sudo ALL=(ALL))之后添加此

username ALL=(ALL) NOPASSWD: /home/username/my_script.sh

现在我们可以sudo在此脚本中使用而无需输入sudo密码

但这可能会导致一些安全问题,因此请参考链接

2.回答我的第二个问题:

要使此脚本适用于已连接的任何USB设备,请将规则文件更改为此

ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/my_script.sh"

asterik(*)告诉您应该为连接的每个USB设备执行此操作!

而已!确保脚本是可执行文件,然后插入USB!

请享用!


0

尝试将代字号替换为您的主目录的完整路径。我不知道这是否行得通,但是您说该脚本在直接运行时可以运行,但是在自动运行时却不行:这让我认为问题可能与由其他人运行它有关用户自动运行时,代字号将为不同的用户解析为不同的值。


在回答问题之前,请先阅读评论
空指针

我确实阅读了评论,然后回答了问题。我做错什么了吗?您指的是哪条评论?
Toby 1 Kenobi 2014年

在评论中已经提供了这些建议,但对我不起作用。.那就是为什么我说要阅读这些评论
空指针

哦,是的,很抱歉,我看不到最后5条评论,但我没有注意到。我的错!
Toby 1 Kenobi 2014年

@Nullpointer:请编辑您的问题,并保留问题中的完整信息,以便人们无需阅读评论...注释不属于问题... ;-)
Fabby 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.