Você precisará extrair as variáveis dos argumentos primeiro para obter os valores substituídos no modelo. Você faz isso de uma maneira muito estranha:
args=("$@")
operation=("${args[0]}")
channel=("${args[1]}")
accountcode=("${args[2]}")
channelname=("${args[3]}")
music=("${args[6]}")
prevchannel=("${args[4]}")
prevchannelname=("${args[5]}")
operation
é uma matriz que contém um elemento. O Bash processa $operation
como ${operation[0]}
. Por que não isso?
operation=$1
channel=$2
accountcode=$3
channelname=$4
prevchannel=$5
prevchannelname=$6
music=$7
Ao declarar o seu template, você deve ter cuidado para escapar de todos os backticks, caso contrário você obtém substituição de comando .
$ extentemplate="\
exten => \'$prevchannel\',n,Queue(\'$prevchannelname\')\
exten => \'$prevchannel\',n,Hangup()\
\
;\'$channelname\'\
exten => \'$channel\',1,Answer()\
exten => \'$channel\',n,ResetCDR()\
exten => \'$channel\',n,Set(CDR(accountcode)=\'$accountcode\')\
exten => \'$channel\',n,Set(CDR(userfield)=inbound)\
exten => \'$channel\',n,Set(MONITOR_FILENAME=\'$channelname\'_\${UNIQUEID})\
exten => \'$channel\',n,Set(CALLERID(name)=\'$channelname\')\
exten => \'$channel\',n,Queue(\'$channelname\')\
exten => \'$channel\',n,Hangup()\
"
Todas essas continuações de linha significam que você não tem nenhuma nova linha na sua cadeia de modelos.
Então
sed "s/exten => '$prevchannel',n,Queue('$prevchannelname')/'$extentemplate'/" $FILE
Novamente, devido às aspas duplas, você está obtendo a substituição de variáveis e comandos. Você precisará de aspas simples e, em seguida, aspas duplas para substituir as variáveis
sed 's/exten => ''"$prevchannel"'',n,Queue(''"$prevchannelname"'')/''"$extentemplate"''/' "$FILE"
# ..^............^^............^^...........^^................^^....^^..............^^..^.^.....^