尝试在 Linux 上运行 shell 脚本时"cannot execute binary file"



我对linux和shell书写非常陌生。我正在尝试使用以下命令从 linux 上的安全外壳 (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.当尝试"更少的路径/到/我的新壳.sh"时,我在终端上得到了这个:

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

3.当我运行文件路径/to/mynewshell时.sh:我得到了这个"Bourne-Again shell脚本文本可执行文件"

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

chmod -x

文件中删除执行权限。这样做:

chmod +x path/to/mynewshell.sh

并运行它

/path/to/mynewshell.sh

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

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

从建议的副本:

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扩展)等行为类似;你只需要知道命令的名称就可以解压缩它,这当然通常很容易谷歌。

对于其他有我问题的人。

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

打开文本文件,单击

顶部的"格式",转到"制作纯文本"单击它。

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

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

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

您可以使用 file 命令检查它被标识为什么:

file path/to/mynewshell.sh

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

确保 R 脚本

指向正确的 R 脚本执行程序。

就我而言,我有一个无法执行的 bash 脚本。该文件最初是从 find ... -print0 命令生成的。在脚本中留下一个\0字符,删除该字符解决了我的问题。

相关内容

  • 没有找到相关文章