如何在 ubuntu 14.04 上以编程方式解压缩 ruby 运行 中的 .tar.xz 文件(无中间件)?
How to programmatically decompress .tar.xz file (without intermediates) in ruby running on ubuntu 14.04?
所以...
我正在编写 ruby 脚本来初始化生产主机,以便 运行 应用程序(创建用户组、用户、SSH 密钥等),但我一直在安装 NPM / 节点。我不想使用包管理器来安装它,而是简单地获取我想要的版本(在本例中为 6.9.1)的 .tar.xz 文件并将其解压缩到我想要的位置二进制文件添加到我的路径。目前,我们将从 Node downloads...
我找到了 this SO 答案,我正在使用它来尝试让我的脚本正常工作。看起来 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,但我不想包含任何依赖项。对实现优雅的解决方案有什么想法吗?
system
太弱了。为此,您需要 IO::popen
。
IO.popen(['tar', '-xJC', target_dir, '-f', '-'], 'wb') do |io|
io.write(IO.binread(source))
end
popen
将打开一个子进程,并给你 io
连接到它的 stdin/stdout。不需要 FileUtils,-C
选项告诉 tar
把东西放在哪里。
所以...
我正在编写 ruby 脚本来初始化生产主机,以便 运行 应用程序(创建用户组、用户、SSH 密钥等),但我一直在安装 NPM / 节点。我不想使用包管理器来安装它,而是简单地获取我想要的版本(在本例中为 6.9.1)的 .tar.xz 文件并将其解压缩到我想要的位置二进制文件添加到我的路径。目前,我们将从 Node downloads...
我找到了 this SO 答案,我正在使用它来尝试让我的脚本正常工作。看起来 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,但我不想包含任何依赖项。对实现优雅的解决方案有什么想法吗?
system
太弱了。为此,您需要 IO::popen
。
IO.popen(['tar', '-xJC', target_dir, '-f', '-'], 'wb') do |io|
io.write(IO.binread(source))
end
popen
将打开一个子进程,并给你 io
连接到它的 stdin/stdout。不需要 FileUtils,-C
选项告诉 tar
把东西放在哪里。