复制并执行失败后 Shell 属性发生变化

复制并执行失败后 Shell 属性发生变化

我在桌面目录中创建了一个测试 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 标志,因此如何处理这些标志由安装选项决定。

相关内容