GNU Parallel:不引用包含空格的Perl替换字符串值吗?

tone

我正在使用的脚本parallel当前看起来像这样:

#!/bin/bash
seq ${2:-3} | parallel --tty -j0 sidplayfp -wch{}.wav '{=$_=join" ",map{"-u".$_}grep!/@{[seq()]}/,(1..total_jobs())=}' ${@:3} -q $1 '2>/dev/null'

例如,运行./sidrender.sh Stomp.sid有望执行以下命令:

sidplayfp -wch1.wav -u2 -u3 -q Stomp.sid 2>/dev/null
sidplayfp -wch2.wav -u1 -u3 -q Stomp.sid 2>/dev/null
sidplayfp -wch3.wav -u1 -u2 -q Stomp.sid 2>/dev/null

但是,这不能正常工作,并且当与一起查看时--dry-run,事实证明parallel是一起引用了这些-u标志(例如sidplayfp -wch1.wav '-u2 -u3' -q Stomp.sid 2>/dev/null),因为它们来自相同的Perl表达式。

这是正在发生的情况的最小示例:

$ parallel --dry-run 'echo {= $_="foo bar" =}' ::: 1
echo 'foo bar'

如果要替换"foo bar""foo",则输出将echo foo不带引号。

因为sidplayfp在引号中没有正确解析参数,所以我需要一种方法来停止parallel引用输出,但是我无法在手册页中找到方法。

奥莱·丹吉(Ole Tange)

用途eval

seq ${2:-3} |
  parallel --tty -j0 eval sidplayfp -wch{}.wav '{=$_=join" ",map{"-u".$_}grep!/@{[seq()]}/,(1..total_jobs())=}' ${@:3} -q $1 '2>/dev/null'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章