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