尝试在linux上运行shell脚本时“无法执行二进制文件”

时间:2016-05-22 18:58:40

标签: linux bash shell

我是linux和shell脚本编程的新手。 我试图使用以下命令从linux上的安全shell(ssh)运行一个shellcript:

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.当我运行文件路径/ / mynewshell.sh时:我得到了“Bourne-Again shell脚本文本可执行文件”

请提供有关如何尝试执行shellscript的任何建议。

5 个答案:

答案 0 :(得分:10)

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

CoreData

运行它
chmod -x

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我遇到的其他任何人。

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

打开文本文件,单击顶部的“格式”,然后单击“生成纯文本”。

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

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

答案 4 :(得分:0)

该脚本根本不是shell脚本。 Shell脚本通常是可读的,并且包含Shell代码。 cat命令显示的输出确实看起来像是某种二进制文件。 需要注意的是,这可能是由于复制时存在文件转换问题,但对我来说,它看起来更像是实际的二进制文件。

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

file path/to/mynewshell.sh

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

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