我在桌面目录中创建了一个测试 shell 脚本,使其可执行,并且运行正常。我将其复制到已安装的 SD 芯片上,但属性发生了变化,执行失败。
这是一个测试示例。请注意,命令提示符是工作目录。为了清晰起见,对其进行了轻微的编辑(添加了空白行并删除了一些提示)。
我不明白为什么属性会改变以及为什么脚本会失败。
## print file test.sh contents
Desktop>> cat test.sh
#!/bin/bash
echo 'Works OK'
Desktop>>
## list file attributes to verify it is executable.
##Note attributes. They change after file copy.
Desktop>> ls -al test.sh
-rwxr-xr-x. 1 ron ron 28 Feb 16 13:41 test.sh
Desktop>>
## run the shell
## shell output is correct.
Desktop>> ./test.sh
Works OK
Desktop>>
## copy shell to SD chip
Desktop>> cp test.sh /media/removable/10-EDC/org
Desktop>>
## change to SD chip
Desktop>> cd /media/removable/10-EDC/org
org>>
##list file attributes. Note that they have changed.
## org>> ls -al test.sh
-rwxrwxrwx. 1 ron ron 28 Feb 16 14:58 test.sh
org>>
## run the shell. Fails.
org>> ./test.sh
bash: ./test.sh: Permission denied
org>>
操作系统是 Ubuntu 16.04。
有人认为这可能与 SD 芯片的格式化方式有关。我认为它被格式化为 msdos(fat??)以与其他机器兼容。我在这方面(格式化问题)没有经验。
任何帮助均感激不尽。
答案1
这取决于 SD 卡的安装方式。安装选项是“noexec”,它禁止执行安装设备上的所有内容。因此,请使用mount
(不带参数)检查您的安装选项(mount | grep media
可能会限制输出到您的 SD 卡)。
是的,如果设备格式化为 VFAT(与 SD 卡一样,除非它们是用于 Raspberry),它将不支持用户/组/其他访问标志而不是 Exec 标志,因此如何处理这些标志由安装选项决定。