【问题标题】:How to pass quoted args to GNU Parallel如何将引用的参数传递给 GNU Parallel
【发布时间】:2011-11-22 16:22:49
【问题描述】:

我需要将一些包含空格和其他字符的文本传递给由 GNU Parallel 运行的脚本。

这是一个非常简单的例子:

$ seq 1 3 | parallel echo "Quoted ' (text)"

上面的例子会输出这个:

sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file    

但是,如果我这样做,一切正常:

seq 1 3 | parallel echo "\"Quoted ' (text)\""

我碰巧是从 python 脚本运行它,所以在传递参数之前,我在脚本中双引号引用它们,如下所示:

args = ["Some arg", "Another arg", "etc."]
args = ' '.join(pipes.quote(pipes.quote(arg)) for arg in args)

但这似乎不是一个干净的解决方案。

有人知道将参数传递给 GNU Parallel 的更好方法吗?

谢谢!

【问题讨论】:

  • '不是一个干净的解决方案',但它有效吗?祝你好运。

标签: bash parallel-processing args


【解决方案1】:
zsh-4.3.12[sysadmin]% print -l {1..3} | 
  parallel -q echo "Quoted ' (text)"
Quoted ' (text) 1
Quoted ' (text) 2
Quoted ' (text) 3

如@mortehu 所述:

通过并行传递给命令的参数由 shell 扩展两次:一次在并行调用中,一次在并行运行命令时。 -q 阻止第二次 shell 扩展。

【讨论】:

  • 谢谢!我在手册页中查找了一些如此简单但找不到的东西。感谢您如此清楚地回答,而不是说“阅读手册页!”之类的话。如此简单。
  • 为了更清楚一点:通过并行传递给命令的参数由 shell 扩展两次:一次在并行调用中,一次在并行运行您的命令时。 -q 阻止第二次 shell 扩展。
【解决方案2】:

手册页中有一个专门用于引用的部分:

http://www.gnu.org/s/parallel/man.html#QUOTING

它甚至提到了你在问题中写的错误信息。

如果您能写得更好,请将您的版本通过电子邮件发送至:parallel@gnu.org。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多