2

也许这里有人可以帮助我。在两台机器上安装了 Ubuntu 12.04 LTS (kubuntu)。.bashrc.bash_profile文件是相同的,因为每台机器上的文件结构是相同的。

在机器 1 上:我在终端窗口中运行 bash 脚本,简单:./scriptname.sh

在机器 2 上:我不能这样做,必须使用:sh scriptname.sh 我也不能使用./和制表符完成脚本文件名。

所有可执行位都设置正确,所有文件和文件夹都具有正确的权限。在脚本的标题中,shebang 设置正确。

任何想法为什么会发生这种情况?

如果我尝试使用以下命令执行脚本./file_motion_grab.sh

bash: ./file_motion_grab.sh: Permission denied

当我尝试ls -l时,我得到:

-rwxrwxrwx 1 adelie adelie 351 Nov 4 20:32 file_motion_grab.sh

的输出getfacl是:

# file: file_motion_grab.sh
# owner: adelie
# group: adelie
user::rwx
group::rwx
other::rwx

更一般 - 第二台机器上的任何新脚本都必须调用: sh scriptname.sh .bash 文件中可能有问题。但不确定在哪里看。

4

1 回答 1

1

我建议尝试ls -al检查文件和目录的权限。另外,请尝试getfacl file.sh,因为有时 ACL 权限会覆盖正常的 Unix 权限位。

然后我会尝试head -n 1 file.sh | xxd查看第一行,并确保 shebang 作为文件的前两个字符正确存在。有时,隐藏字符(如 Unicode BOM)可能会导致无法正确解释它。

然后我会检查外壳本身的权限。ls -l /bin/bashgetfacl /bin/bash。我还会检查其他口译员是否会发生这种情况;你可以#!/bin/sh用于脚本吗?#!/bin/python(或 Perl,或 Ruby,或类似的东西)?区分这种情况是仅发生在其他 shell 上/bin/bash还是发生在其他 shell 上会很有帮助。

此外,ls /proc/sys/fs/binfmt_misc请查看您是否配置了任何可能会干扰 shell 脚本的正常解释的二进制格式。

尝试从另一个帐户进行测试(如果可以的话)。问题是您帐户独有的吗?我也会尝试重新启动,以防只是一些暂时的损坏导致问题(再次,如果可以的话)。

(答案原本是一系列评论)

于 2012-11-05T02:07:38.820 回答