【问题标题】:tab-expansion and "./" bash shell [closed]选项卡扩展和“./” bash shell [关闭]
【发布时间】:2012-10-24 20:35:08
【问题描述】:

也许这里有人可以帮助我。在两台机器上安装了 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 文件中可能有问题。但不知道去哪里找。

【问题讨论】:

  • 等等,你的意思是./scriptname(/ 后没有空格?)
  • bash 中没有./ 命令。你的意思是,./scriptname,这只是脚本的路径名,对吧?你确定脚本是可读的可执行文件吗?
  • 正确的 ./scriptname.sh 在机器 2 上不起作用,但在机器 1 上工作正常。
  • 所有权限都正确,正确设置为可读可执行。
  • 那么当你输入“./scriptname.sh”并按下回车键时究竟会发生什么?

标签: bash scripting environment ubuntu-12.04 kubuntu


【解决方案1】:

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

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

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

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

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

(答案原本是一系列cmets)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多