Não sei se entendi o que você quer, mas vejo várias coisas que provavelmente precisam ser corrigidas.
IFS=, read scriptname jobname templatename location
lê valores separados por vírgulas. Em file2
, você parece ter espaços em branco ao redor de vírgulas. O espaço em branco terminará nas variáveis. Se nunca houver nenhum espaço em branco dentro de um campo, defina IFS=', '
para tratar qualquer sequência de uma vírgula envolvida por espaço em branco opcional ou qualquer sequência de espaço em branco como um separador. Se pode haver espaços em branco dentro dos campos, mas não no início nem no final, recomendo pré-processar file2
first:
<file2 sed -e 's/^ *//' -e 's/ *, */,/g' -e 's/ *$//' | while IFS=, read …; do …; done
A propósito, <(file2)
é um erro de sintaxe em algumas shells, e em outras shells isso significa que file2
é um comando a ser executado (substituição de processo). Você quis dizer <file2
.
Se houver um /
no nome do script ou no nome do trabalho, ele terminará no comando sed
e causará um erro de sintaxe de sed. Como você não pode ter uma vírgula em nenhum dos campos de file2
por construção, use ,
como o separador de comando sed s
:
sed -e "s,scriptname,$scriptname," -e 's,jobname,$jobname,' …
Em seus dados de exemplo, o local é um diretório, mas no seu código, você tenta gravar a saída nele. Se o local for um diretório, você precisará fornecer um nome de arquivo. Se você quiser usar o mesmo nome de arquivo como $templatename
quando o local é um diretório, você pode fazer isso:
if [ -d "$location" ]; then
location="$location/${templatename##*/}"
fi
Os arquivos $location
e $templatename
não podem ser o mesmo arquivo, caso contrário, sed … "$templatename" >"$location"
primeiro truncará esse arquivo e depois começará a ler a partir dele. Para permitir a possibilidade de os arquivos serem os mesmos, grave a saída do sed em um arquivo temporário e, em seguida, mova-o para o lugar. Se você tem mkstemp
:
location_dir=${location%/*}
tmp=$(TMPDIR=$location_dir mktemp -t)
sed … >"$tmp"
mv -f -- "$tmp" "$location"