LINUX.ORG.RU

Сборка строки в баш

 


0

1

Есть такой мегаскрипт:

https://encode2mpeg.sourceforge.net/encode2mpeg.html

Я его хочу немножко преобразовать, чтобы вместо pcm2aiff (который немножко поломан) использовать sox. Но sox оказался хитее чем кажется, и параметры raw файлов ему нужно задавать перед каждым входным файлом. которых может быт переменное число. Решил сделать крутой цикл:

FULLSOXLINE=''
			
SOXPRAMS=' -L -b 16 -e signed -c 1 -r 441000 -t raw '
			
for ((n=0;n<${mpegchannels:-2};n++)) ; do
${FULLSOXLINE}+=${SOXPARAMS}+"$output"_${CHANLIST[n]}.pcm
done

			
sox -m ${FULLSOXLINE} -c$((${mpegchannels:-2})) -b 16 -r"$asr" -e signed  "$output".aiff

но естественно оно не работает как я задумал:

./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_l.pcm: No such file or directory
./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_r.pcm: No such file or directory
./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_ls.pcm: No such file or directory
./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_rs.pcm: No such file or directory
./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_c.pcm: No such file or directory
./encode2mpeg: line 7438: +=+/dev/shm/svcd_test.sio_lfe.pcm: No such file or directory
sox:      SoX v14.4.2

sox FAIL sox: Not enough input filenames specified

и вот .. я в ту-пи-ке.

★★★★★
Ответ на: комментарий от screamager
FULLSOXLINE=""
SOXPARAMS=" -L -b 16 -e signed -c 1 -r 441000 -t raw "
for ((n=0;n<${mpegchannels:-2};n++)) ; do
FULLSOXLINE+="$SOXPARAMS""$output"_${CHANLIST[n]}.pcm
done
			
echo ${FULLSOXLINE}
			
sox -m ${FULLSOXLINE} -c$((${mpegchannels:-2})) -b 16 -r"$asr" -e signed  "$output".aiff

вот так работает вроде!

Andrew-R ★★★★★
() автор топика