Bash 脚本不会将 TEE 输出到子目录

Bash 脚本不会将 TEE 输出到子目录

我有一个脚本,它通过逐行读取输入文件来运行多个curl 命令(每行都有不同的curl 参数)。我正在尝试将curl 命令的标准输出和标准错误发送到日志文件,并将它们显示到终端。很简单,对吧?

但由于某种原因,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

注意:我将请求回显到子目录以及保存curl 请求的输出的行全部工作。只有 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/[..]吧?

相关内容