stdout/stderr 출력을 타임스탬프된 로그 파일로 리디렉션

stdout/stderr 출력을 타임스탬프된 로그 파일로 리디렉션

stdout 및 stderr을 로그 파일로 리디렉션하려고 합니다. 파일 이름은 현재 타임스탬프를 사용하여 동적으로 생성되어야 합니다.

다음을 사용하여 파일 이름을 만들 수 있습니다.

$ date +%Y-%m-%d_%H-%M-%S.txt
2018-04-10_16-55-55.txt

그래서 저는 다음과 같은 작업을 하고 싶습니다.

mycommand &> (date +%Y-%m-%d_%H-%M-%S.txt)

그러나 이것은 작동하지 않습니다 ( -bash: syntax error near unexpected token `(')

답변1

예, 명령 대체를 사용해야 합니다.

mycommand &> "$(date +%Y-%m-%d_%H-%M-%S.txt)"

이것은 bash-말하다

mycommand  >"$(date +%Y-%m-%d_%H-%M-%S.txt)" 2>&1

어느 것이 동일합니까?

mycommand  >"$(date +%F_%H-%M-%S.txt)" 2>&1

( %F동일하다 %Y-%m-%d)

명령 대체는 $(...)내부 명령의 출력으로 대체됩니다.

서브셸을 사용하고 (...)있으며 .subshell이 ​​이러한 리디렉션을 허용할 수 없습니다.

답변2

이 시도:

today=`date +%Y-%m-%d_%H-%M-%S`; mycommand > ${today}.txt 2>&1

관련 정보