Eu tenho um script que executa vários comandos curl lendo um arquivo de entrada linha por linha (cada linha tem diferentes parâmetros de curva). Eu estou tentando tee o stnd out e stnd erro do comando curl para um arquivo de log, bem como exibi-los para o terminal. Simples, né?
Mas, por alguma razão, o tee não salvará a saída no subdiretório onde eu quero o arquivo de log. Ele criará o arquivo de log se eu especificar o diretório em que o script está sendo executado.
Abaixo está o código relevante:
if [[ -f $1 ]]
then
echo "Running requests from $1"
bname='basename ${1} | awk -F\. '{print $1}''
mkdir ./output/${bname}
echo "Will write output to ./output/${bname}"
while read line
do
let j=j+1
post_data='perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "${line}"'
echo $line > ./output/${bname}/${bname}_${j}_request
curl -v -b cookie ${SvrProperties} -d "xmlrequest=$post_data" -o ./output/${bname}/${2}_${j}_response.xml 2>&1 | tee /output/${bname}/${2}_${j}_Run.log &
done < ${1}
elif [[ -d $1 ]]
then
for file in 'ls $1'
do
echo "Running requests from $1/${file}"
bname='basename ${file} | awk -F\. '{print $1}''
mkdir ./output/${bname}
echo "Will write output to ./output/${bname}"
while read line
do
let i=i+1
post_data='perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "${line}"'
echo $line > ./output/${bname}/${bname}_${i}_request
curl -v -b cookie ${SvrProperties} -d "xmlrequest=$post_data" -o ./output/${bname}/${2}_${i}_response.xml 2>&1 | tee /output/${bname}/${2}_${i}_Run.log &
done < ${1}/${file}
done
else
echo "Invalid input, neither file nor directory! Exiting..."
exit
fi
Nota: A linha em que faço eco da solicitação ao subdiretório, além de salvar a saída da solicitação de curl, todo o trabalho. É apenas o comando tee que não funciona.
Os arquivos de log serão criados se eu escrever algo assim:
curl -v -b cookie ${SvrProperties} -d "xmlrequest=$post_data" -o ./output/${bname}/${2}_${j}_response.xml 2>&1 | tee ${2}_${j}_Run.log &
Mas não está no local que eu quero.