为什么我无法运行由 python 脚本生成的 shell 脚本,出现“无法执行二进制文件”错误?

问题描述 投票:0回答:1

我使用powershell通过python脚本生成shell脚本,如下。

python generate_large_local_array_run.py > large_local_array_run.sh

但是当我在powershell(或Ubuntu,我在win10中安装了wsl2)中使用bash运行shell脚本时,它给了我“无法执行二进制文件”错误。

bash large_local_array_run.sh
large_local_array_run.sh: bash large_local_array_run.sh: cannot execute binary file

为了解决这个问题,我在VScode中打开shell脚本

large_local_array_run.sh
,直接将内容复制到一个新的文本文件中,并将新的文本文件另存为
temp.sh
。 这次,我可以使用以下命令在 powershell 和 Ubuntu 中运行
temp.sh
bash temp.sh
。 为什么会这样?原来的
large_local_array_run.sh
和新的
text.sh
有什么区别。它们对于原始眼睛来说是完全相同的,但是它们有一些不同的格式吗?

python bash windows-subsystem-for-linux binaryfiles
1个回答
0
投票

你的程序

python generate_large_local_array_run.py

生成一个非纯ascii文件。问题可能出在文件的开头。如果可能,您需要修改

generate_large_local_array_run.py
中的代码,以便它提供有效的 shell 脚本。

python generate_large_local_array_run.py | strings > large_local_array_run.sh

strings
过滤掉不可打印的内容。

strings
打印文件中可打印字符的序列。这是一个删除不可打印字符的黑客,这些字符是
bash
窒息的字符。这远非万无一失。
strings
仅打印至少 4 个字符的序列。所以,

echo something
<binary stuff, non printables>
ls
<binary stuff, non printables>

会给您

echo
,但不会给您
ls

如前所述:您需要修改

generate_large_local_array_run.py
才能生成有效的脚本,不含不可打印的内容。

© www.soinside.com 2019 - 2024. All rights reserved.