stdout 및 / 또는 stderr를 변수에 지정한 경로로 리디렉션하려면 어떻게해야합니까? 참고 : 변수 자체 를 덮어 쓰고 싶지 않고 변수에 지정된 파일에 std [xxx] 쓰기를 만들고 싶습니다.
예를 들어, scp
명령이 실패하면 실패 메시지를 stderr
또는 stdout
(실패 할 때 출력하는 것이 확실하지 않음) 대신에 지정된 로그 파일로 출력 하는 간단한 스크립트입니다 . 로그 파일의 경로는 다음 $LOG
변수에 저장됩니다 .
LOG=/path/to/file.log
scp file1 host@remote
# do 'whatever' if scp command succeeds:
if [ $? = 0 ];
then
whatever
else
# else log both stdout/stderr to ${LOG} file
&>"${LOG}"
# DEBUG - print contents of ${LOG} var for testing purposes
printf "${LOG}"
이 스크립트의 결과는 아무것도 표시되지 않습니다 /path/to/file.log
파일과 간단한 인쇄 /path/to/file.log
에를 stdout
. 따라서 &>
.
이미 특정 scp
명령이 작동하는지 확인 했으므로 잠재적 인 문제가 아니라는 것을 알고 있습니다.
아니면 이것이 사용자 지정 로그 파일을 처리하는 가장 적절한 방법일까요? 로그 파일 경로를 변수에 저장하는 것보다 자체 로깅 시스템을 구성하는 더 좋은 방법이 있습니까?
명령을 실행 한 후 출력을 기록하려고 시도하는 것 같습니다 . 이는 불가능합니다.
scp
명령 의 출력을 무조건 기록 하려면 명령 자체와 같은 줄에 리디렉션 연산자를 포함하면됩니다. 즉,
&>"${LOG}" scp file1 host@remote
명령이 실패한 경우에만 로그 출력을 저장하려는 경우 (코드에서 수행하려는 것처럼 표시됨) 출력을 임시 파일로 리디렉션 한 다음 나중에 원하는 위치로 파일을 이동하는 것은 어떻습니까? 다음과 같이 보일 수 있습니다.
#!/bin/bash
# Set path the real log file location
LOG=/path/to/file.log
# Create a temporary file to capture standard output and standard error
TEMPLOG="$(mktemp)"
# Run command and redirect output to temporary logfile
2>"${TEMPLOG}" scp file1 host@remote
# do 'whatever' if scp command succeeds:
if [ $? = 0 ];
then
echo 'Command successful!'
# else log both stdout/stderr to ${LOG} file
else
# Move the log file from the temporary location to the desired location
mv "${TEMPLOG}" "${LOG}"
# DEBUG - print contents of ${LOG} var for testing purposes
printf "${LOG}"
fi
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다