我使用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 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
才能生成有效的脚本,不含不可打印的内容。