Bash 스크립트가 TEE를 하위 디렉터리에 출력하지 않습니다.

Bash 스크립트가 TEE를 하위 디렉터리에 출력하지 않습니다.

입력 파일을 한 줄씩 읽어 여러 컬 명령을 실행하는 스크립트가 있습니다(각 줄에는 다른 컬 매개변수가 있음). 컬 명령의 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/[..]?

관련 정보