I made a little script that searches and substitutes parameters in a configuration file but I've a problem:
Configuration file:
conf.tmp
parametro1=mario
parametro2=ugo
parametro3=elena
parametro4=sara
Script:
#!/bin/bash -x
TMP_FILE=./test.tmp
CONF_FILE=./conf.tmp
TOT_PARAMETERS=$#;
scratch=""
if test $[TOT_PARAMETERS%2] -ne 0
then
echo "Usage: $0 desc"
exit 1
fi
if test $# -lt 2
then
echo "Usage: $0 desc"
exit 1
fi
ctr=0
until [ -z "$1" ]
do
PARAMETER=$1
NEW_VALUE=$2
if test ${ctr} -eq 0
then
scratch="sed \"s%^$PARAMETER=.*%${PARAMETER}=${NEW_VALUE}%g\" "
else
scratch="${scratch} | sed \"s%^$PARAMETER=.*%${PARAMETER}=${NEW_VALUE}%g\" "
fi
let ctr=ctr+1
shift 2
done
echo -e ""
echo "COMMAND LINE: cat ${CONF_FILE} | ${scratch} > $TMP_FILE";
echo -e ""
cat ${CONF_FILE} | ${scratch} > $TMP_FILE
# ... continua
executing the script:
:~$ ./script.sh parametro1 pippo parametro2 pluto parametro3 paperino
look the output, the printed command line is correct but it works only if executed out of the script.
The same command in the script fails.
Command line:
cat ./conf.tmp | sed "s%^parametro1=.*%parametro1=pippo%g" | sed "s%^parametro2=.*%parametro2=pluto%g" | sed "s%^parametro3=.*%parametro3=paperino%g" > ./test.tmp
in debug mode I look that:
sed '"s%^parametro1=.*%parametro1=pippo%g"' '|' sed '"s%^parametro2=.*%parametro2=pluto%g"' '|' sed '"s%^parametro3=.*%parametro3=paperino%g"'
sed: -e expression #1, char 1: Unknown command: `"'
Any hints?
Ps. Sorry for my terrible english ;)