【问题标题】:"cannot execute binary file" when trying to run a shell script on linux尝试在 Linux 上运行 shell 脚本时出现“无法执行二进制文件”
【发布时间】:2016-09-19 14:08:40
【问题描述】:

我对 linux 和 shell 脚本非常陌生。 我正在尝试使用以下命令从 linux 上的安全 shell (ssh) 运行 shellscript:

chmod +x path/to/mynewshell.sh

sh path/to/mynewshell.sh

我得到这个错误:

path/to/mynewshell.sh: path/to/mynewshell.sh: cannot execute binary file.

尝试使用此命令:

bash path/to/mynewshell.sh

我得到同样的错误。

尝试使用此命令:su - myusername sh path/to/mynewshell.sh 它要求我输入密码并给我这个错误:no such file or directory

1. cat -v path/to/mynewshell.sh 的结果是: ^@^@^@^@^@^@^@^@Rscript "$dir"/diver_script.R 完成

2.当尝试'less path/to/mynewshell.sh'时,我在终端上得到了这个:

#!/bin/bash/Rscript^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
for dir in /path/to/* ; do 
^@^@^@^@^@^@^@^@Rscript "$dir"/myRscript.R
done

3.当我运行文件 path/to/mynewshell.sh 时:我得到了这个“Bourne-Again shell script text executable”

请就如何尝试执行 shellscript 提供任何建议。

【问题讨论】:

  • /path/to/ 还是/path/toscript/?你似乎把它们弄混了。
  • 试试less path/toscript/mynewshell.sh看看这个文件是否真的是一个shell脚本。
  • 编辑问题并添加cat -v path/toscript/mynewshell.sh的结果。你是从windows系统导入这个脚本的吗?第一行是空的吗?否则它是否以 shebang 和有效命令开头?
  • 或者,运行 file path/toscript/mynewshell.sh 并编辑您的问题以包含输出。
  • 该脚本文件严重损坏。我们可以尝试猜测该文件中应该包含的内容,但如果您能找到它的原始来源并检索到未损坏的副本,那您会更好。

标签: linux bash shell


【解决方案1】:

那个脚本根本就不是一个shell脚本。 shell 脚本通常是可读的并且包含 shell 代码。 cat 命令显示的输出看起来确实像是某种二进制文件。 正如一些注释,这可能是因为复制时文件转换问题,但它看起来更像是一个实际的二进制文件。

您可以使用 file 命令检查它的标识,因此:

file path/to/mynewshell.sh

从一个干净的脚本开始,重写代码,看起来你只是想在一个目录中运行一些 R 脚本?

确保 R 脚本指向正确的 R 脚本执行者。

【讨论】:

    【解决方案2】:

    对于遇到我遇到的问题的其他人。

    我试图运行一个转换为 shell 脚本的 16 位 unicode 文本文件,这不起作用,因为所有 16 位 unicode 文本文件在开始时都有一个 0xFFFE 标记,这使得 mac os 不像该文件,这给出了“无法执行二进制文件”错误。

    打开文本文件点击顶部的“格式”,下到“制作纯文本”点击它。

    打开你的终端类型chmod 777 /path/to/file.sh

    输入终端:/path/to/file.sh 运行它

    【讨论】:

    • 无论您希望完成什么,chmod 777 都是错误危险的。您绝对不想这样做在任何情况下向所有用户授予对可执行文件或系统文件的写入权限。您将希望尽快恢复正常权限(对于您的用例,可能是chmod 755)并在尝试再次使用之前了解 Unix 权限模型。如果这种情况发生在可以访问 Internet 的系统上,请检查入侵者是否可以利用它来提升他们的权限。
    【解决方案3】:

    来自proposed duplicate:

    run_me.sh.xz: run_me.sh.xz: cannot execute binary file
    

    这是因为文件已压缩,如 .xz 扩展名所示。您需要先取消压缩,然后才能使用该文件。

    xz -d ./run_me.sh.xz
    chmod +x ./run_me.sh  # probably not necessary if you already did that before
    ./run_me.sh
    

    gzip.gz 扩展)、bzip2.bz2 扩展)等其他压缩方案的行为类似;您只需要知道解压缩命令的名称即可,这当然通常很容易 google。

    【讨论】:

      【解决方案4】:

      我通过 PowerShell 中的 bash 解释器运行我的 shell 脚本时遇到了同样的错误。我在 shell 脚本上运行了dos2unix myscript.sh,现在它运行正常了。

      【讨论】:

        【解决方案5】:

        chmod -x 从文件中删除执行权限。这样做:

        chmod +x path/to/mynewshell.sh
        

        然后运行它

        /path/to/mynewshell.sh
        

        正如错误报告所说,您的脚本实际上不是脚本,而是二进制文件。

        【讨论】:

        • 是的,但是在使用sh 调用脚本时不需要可执行位,所以这不应该是这里的问题。
        • 我给了命令 chmod +x path/toscript/mynewshell.sh /path/to/mynewshell.sh 我得到:/path/to/mynewshell.sh: Not a directory.
        • @RBud /path/to/mynewshell.sh,请尝试使用正确的路径,否则不会发生任何预期...
        猜你喜欢
        • 2019-08-16
        • 2013-05-08
        • 2011-04-26
        • 1970-01-01
        • 2022-08-06
        • 1970-01-01
        • 2012-05-16
        • 2016-04-02
        • 2016-08-22
        相关资源
        最近更新 更多