Основная проблема, похоже, связана с &
в URL после «Радио» и перед «режимом». Он завершает команду snapserver и начинает новую (присвоение переменной, вывод которой перенаправляется), оставляя вывод snapserver не перенаправленным.
Согласно вашему комментарию, измененная команда:
snapserver -s 'pipe:///tmp/snapfifo?name=Radio&mode=read' &>/dev/null &
Забудьте о xargs, просто используйте цикл while. Предполагается, что printf встроен в
#!/bin/sh
printf "%s\n" "command"
printf " %s\\\n" "<GLOBAL_PREFIX_1>" "<GLOBAL_PREFIX_2>" "..."
while read -r ; do
printf " <PREFIX1> <PREFIX2> ... %s <SUFFIX1> <SUFFIX2> ... \\\n" "$REPLY"
done
printf " %s\\\n" "<GLOBAL_SUFFIX_1>" "<GLOBAL_SUFFIX_2>"
printf " %s\n" "..."
. Если в PREFIXn или SUFFIXn есть интересных
символов, например %
или \
, то их нужно будет экранировать.
Конечно, sed будет работать
sed '1i\
GP1\\\
GP2\\\
...\\
s/.*/P1 P2 & S1 S2\\/
$s/.*/&\
GS1\\\
GS2\\\
... '
Для awk у вас есть предложения BEGIN и END ....
Если префикс arg и постфикс arg не содержат пробелов, то -X GNU Parallel создан для вас:
seq 1000 | parallel -X echo global prefix argpre{}argpost global postfix
Он будет равномерно распределяться по номеру ядра. Если вам это не нравится:
seq 1000 | parallel -j1 -n10 -X echo global prefix argpre{}argpost global postfix