【问题标题】:julia shell command tar and pigzjulia shell 命令 tar 和 pigz
【发布时间】:2021-10-14 13:57:49
【问题描述】:

我想在 julia 中压缩一个文件夹:

tar -cvf - "source" | pigz -k -9 > "source.tar.xz"

source 是一个文件夹

我在朱莉娅试过这个:

run(pipeline(`tar -cvf - "2001_ A Space Odyssey"` , `pigz -k -9 \> "2001_ A Space Odyssey.tar.xz"`))

但它没有用。我收到以下错误:

pigz: skipping: > does not exist
pigz: skipping: 2001_ A Space Odyssey.tar.xz does not exist
2001_ A Space Odyssey/
2001_ A Space Odyssey/cover.jpg
ERROR: LoadError: failed process: Process(`pigz -k -9 '>' '2001_ A Space Odyssey.tar.xz'`, ProcessExited(1)) [1]

在 Julia 中我该怎么做?

【问题讨论】:

  • 这可能会有所帮助...stackoverflow.com/a/34093251/2836621
  • 当 Julia 运行命令时,它不会进行任何类似于 shell 的解析——一旦它插入变量,它就会盲目地将每个参数传递给命令。相比之下,bash 在评估之前解析其输入,当它看到> 时,它会在评估之前将其解析为重定向(|&& 等也是如此)。换句话说,> 是 Julia 中不存在的 shell 语法;要实现相同的行为,请将参数传递给 run

标签: shell command julia pipeline external


【解决方案1】:

您不能在 Julia 命令中使用像 > 这样的 shell 命令,而是将文件作为额外参数传递:

run(pipeline(`tar -cvf - "source"`, `pigz -k -9`, "source.tar.xz"))

【讨论】:

  • 谢谢!有用。但我对一些事情感到困惑。我也试过了:julia cmd = pipeline(`tar -cvf - "source"` |> `pigz -k -9` |> "source.tar.xz") cmd = pipeline(`pigz -k -9`, stdin=`tar -cvf - "source"`, stdout=`"source.tar.xz"`) 为什么这些不起作用?
  • 删除 stdout 关键字参数中文件周围的引号。
猜你喜欢
  • 1970-01-01
  • 2016-08-23
  • 2021-10-23
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
相关资源
最近更新 更多