명령의 출력을 사용하여 출력을 리디렉션할 파일의 이름을 결정합니다.

명령의 출력을 사용하여 출력을 리디렉션할 파일의 이름을 결정합니다.

smartctl -a해당 출력의 장치 일련 번호를 출력이 저장되는 파일 이름으로 실행하고 사용하고 싶습니다 . 나는 smartctl이를 두 번 호출하고 적절한 텍스트 조작을 사용하여 출력을 분할함으로써 이를 수행할 수 있다는 것을 알고 있습니다. 단 한 번의 호출로 이를 수행할 수 있는 방법이 있습니까 smartctl?

답변1

출력을 smartctl변수에 저장하고 필요한 만큼 여러 번 사용하세요.

smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"

답변2

출력을 smartctl -a임시 파일에 저장한 다음 이중 구문 분석할 수 있습니다. 이렇게 하면 스크립트를 빠르게 테스트할 수 있습니다(임시 파일을 한 번 생성하고 에 대한 호출을 주석 처리하고 smartctl만족할 때까지 구문 분석기를 조정한 다음 행의 주석 처리를 제거합니다 smartctl).

또는 pee파이프를 사용하여 출력을 smartctl -a두 프로그램 모두에 파이프할 수 있지만 한 프로세스에는 다른 프로세스에서 찾은 시퀀스 번호로 이름을 바꿀 수 있는 임시 파일이 여전히 필요합니다.

관련 정보