入力ファイルを1行ずつ読み取って複数のカールコマンドを実行するスクリプトがあります(各行には異なるカールパラメータがあります)。 curlコマンドのstdoutとstderrをログファイルに送信し、端末に表示しようとしています。とても簡単ですか?
ただし、何らかの理由で、teeはログファイルが必要なサブディレクトリに出力を保存しません。スクリプトが実行されるディレクトリを指定すると、ログファイルが生成されます。
関連コードは次のとおりです。
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
注:リクエストをサブディレクトリにエコーし、カールリクエストの出力を保存する私の行はすべて機能しました。 teeコマンドだけは機能しません。
次のように作成すると、ログファイルが生成されます。
curl -v -b cookie ${SvrProperties} -d "xmlrequest=$post_data" -o ./output/${bname}/${2}_${j}_response.xml 2>&1 | tee ${2}_${j}_Run.log &
しかし、私が望む場所ではありません。
ベストアンサー1
本当にその言葉は正しいですか?
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 &
?それでは、.
一つは抜けなければなりませんかtee ./output/[..]
?