我有点困惑:我似乎无法在我的 Debian 机器上直接从外部驱动器执行脚本。
通过 works 来执行它们bash
,但是 shebang 似乎不起作用。
<user>@<host>:<directory>$ ls -ll ./dl.sh
<user>@<host>:/media/external$ cp ~/dl.sh ./dl.sh
<user>@<host>:/media/external$ ./dl.sh
bash: ./dl.sh: Permission denied
<user>@<host>:/media/external$ ~/dl.sh
foo
<user>@<host>:/media/external$ bash ./dl.sh
foo
<user>@<host>:/media/external$ cat ./dl.sh
#!/bin/bash
echo "foo"
<user>@<host>:/media/external$ ls -ll ./dl.sh
-rwxr-xr-x 1 <user> <user> 24 Aug 2 18:35 ./dl.sh
<user>@<host>:/media/external$ ls -ll ~/dl.sh
-rwxr-xr-x 1 <user> <user> 24 Aug 2 18:34 /home/<user>/dl.sh
(部分内容<braces>
已删除。)
从这问题,你需要两样东西才能直接运行 shell 脚本:
- 脚本被标记为可执行,并且对于相关用户是可读的。这是真的。
- 脚本以正确的 shebang 行作为前缀。这也是正确的,否则从我的主目录运行它将不起作用。
我显然遗漏了一些东西,可能是一些显而易见的东西。有什么建议吗?
答案1
当我写下问题的 95% 时,我找到了答案,就像通常遇到的情况一样。
就好像脚本仍然被标记为不可执行。为什么?...因为文件系统曾是noexec
。
我查看了 fstab,它显示以下内容:
/dev/mapper/external /media/external ext4 errors=remount-ro,user,nofail 0 2
这不直接地声明驱动器不可执行。然而,事实证明,user
暗示 noexec
除非被后续选项覆盖。
如果我查看了 fstab 中的输出mount
,我可能可以在更短的时间内解决这个问题。