我对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字符,删除该字符解决了我的问题。