我正在使用的脚本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
引用输出,但是我无法在手册页中找到方法。
用途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] 删除。
我来说两句