Bash:在变量中使用原始二进制文件作为可执行文件?

Bash:在变量中使用原始二进制文件作为可执行文件?

我想创建一个包含二进制数据的变量,然后在命令中执行。例子:

#!/bin/bash
var="$(cat /bin/sleep)"
"$var" 9999

答案1

您不能执行这样的变量,因为:

  • 内核执行文件,
  • shell 可以执行存储在变量中的命令行,但无法解释二进制数据
  • 将二进制文件的内容存储在变量中可能效果不佳,因为文件中可能存在空字节(并且大多数 shell 的变量中不能有空字节)
  • 即使您使用进程替换来获取包含该变量内容的临时文件,进程替换文件句柄也无法执行

因此,您必须将内容存储在文件中,使该文件可执行,希望不会因为空字节而丢失任何内容,然后执行该文件。

相关内容