总之, 如何运行一个bash压缩脚本? ,但这可以用二进制,而不是一个shell脚本?
假设我有一个压缩成.gz的二进制文件。 我可以解压缩到一个pipe道,然后检查内容:
$ gzip -d --stdout hello.gz | 文件 - / dev / stdin:ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),dynamic链接(使用共享库),未删除 $
而不是pipe道输出到一个命令,有什么办法,我可以实际执行pipe道本身的内容,而不写入文件?
我考虑使用命名pipe道,但这似乎并不工作:
$ mkfifo execpipe $ chmod 777 execpipe $ gzip -d --stdout hello.gz> execpipe& [3] 30034 $ ./execpipe bash:./execpipe:权限被拒绝 $ [3] +损坏的pipe道gzip -d --stdout hello.gz> execpipe $
有没有办法执行一个pipe道的内容而不创build一个实际的文件?
我相信答案是否定的。
您可以通过将文件传递给Linux加载程序来手动执行文件,该加载程序将被命名为/lib/ld-linux.so
。 *它需要一个实际的文件,但。 它不能执行管道或标准输入; 它需要能够mmap()
文件。
$ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /bin/true $ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 - < /bin/true -: error while loading shared libraries: -: cannot open shared object file: No such file or directory $ /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 <(cat /bin/true) /dev/fd/63: error while loading shared libraries: /dev/fd/63: invalid ELF header
*在我的Red Hat机器上是/lib/ld-linux.so.2
位)或/lib64/ld-linux-x86-64.so.2
位)。 在我的Ubuntu机器上是/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
。