Сценарий, с которым я пишу 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
цитирование вывода, но я не могу найти способ сделать это на странице man.