![명령의 출력을 사용하여 출력을 리디렉션할 파일의 이름을 결정합니다.](https://linux55.com/image/34062/%EB%AA%85%EB%A0%B9%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EA%B2%B0%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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
두 프로그램 모두에 파이프할 수 있지만 한 프로세스에는 다른 프로세스에서 찾은 시퀀스 번호로 이름을 바꿀 수 있는 임시 파일이 여전히 필요합니다.