gpt4 book ai didi

ruby - 如何在 ubuntu 14.04 上运行的 ruby​​ 中以编程方式解压缩 .tar.xz 文件(没有中间体)?

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:54 34 4
gpt4 key购买 nike

所以...

我正在编写一个 ruby​​ 脚本来初始化生产主机以运行应用程序(创建用户组、用户、SSH key 等),但我一直在安装 NPM/Node。我不想使用包管理器来安装它,而是简单地获取我想要的版本(在本例中为 6.9.1)的 .tar.xz 文件并将其解压缩到我想要的位置并添加二进制文件到我的路。目前,我们将从 Node downloads 得到这个...

我找到了 this所以回答我用来尝试让我的脚本工作。看起来 Ruby 没有开箱即用的方式来处理“.xz”文件,但我的 Ubuntu 发行版确实有更高版本的 tar,因此它可以处理“tar -xJf ...”。我正在考虑按照...做一些事情

require 'fileutils'
require 'open-uri'

uri = "https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz"
source = open(uri)
data = system("cat", IO.binread(source), "|", "tar", "-xJf", "-")
# put data where I want using FileUtils

...我绝对可以使用一个中间文件和更多系统命令(或者甚至只是一个 curl 调用,但我尽量不使用系统调用)。我看到有我可以使用的 gem ,例如 this ,但我不想包含任何依赖项。对实现优雅的解决方案有什么想法吗?

最佳答案

系统 太弱了。为此,您需要 IO::popen

IO.popen(['tar', '-xJC', target_dir, '-f', '-'], 'wb') do |io|
io.write(IO.binread(source))
end

popen 将打开一个子进程,并为您提供连接到其标准输入/标准输出的 io。不需要 FileUtils,-C 选项告诉 tar 把东西放在哪里。

关于ruby - 如何在 ubuntu 14.04 上运行的 ruby​​ 中以编程方式解压缩 .tar.xz 文件(没有中间体)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922942/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com