也许这里有人可以帮助我。已经在两台机器上安装了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脚本名称。但不确定在哪里看。
我建议尝试使用ls -al
检查文件和目录上的权限。另外,尝试getfacl file.sh
,因为有时有ACL权限覆盖普通Unix许可位。
然后,我将尝试head -n 1 file.sh | xxd
,查看第一行,并确保Shebang作为文件的前两个字符正确。有时,隐藏的字符,例如Unicode BOM,可能会导致它无法正确解释。
然后,我将检查外壳本身的权限。ls -l /bin/bash
和getfacl /bin/bash
。我还会检查其他口译员是否发生这种情况。您可以将#!/bin/sh
用于脚本吗?#!/bin/python
(或Perl,Ruby,或类似的东西)?区分这种情况是仅适用于/bin/bash
还是其他外壳会有所帮助。
另外,请看一下ls /proc/sys/fs/binfmt_misc
,看看您是否配置了可能干扰Shell脚本的正常解释的二进制格式。
也尝试从另一个帐户进行测试(如果可以的话)。问题是您帐户独有的吗?我也会尝试重新启动,以防万一只是一些瞬时腐败引起了问题(如果可以的话,同样)。
(答案最初是一系列评论)