쉘 스크립트에서 명령을 실행하고 time dd
있으며 결과를 파일로 출력하고 화면에 인쇄하고 싶습니다. 현재 실행 중인 라인은 다음과 같습니다.
(time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count) >> $log_file 2>&1 &
이로 인해 빈 파일이 남고 화면에 출력되지 않습니다. 이 세 가지를 이루려면 어떻게 해야 합니까?
저는 Busybox가 설치된 임베디드 시스템에서 이것을 실행하고 있습니다.포함되지tee
그럼 중복은 아니지이 문제.
답변1
표시된 내용은 내 시스템에서 예상대로 작동합니다. bash
대신 을(를) 사용하고 있습니까 sh
? 어쨌든, 나는 와 를 사용해 dash
보았고 거기에서도 작동했습니다. 그것이 없으면 유일한 해결책은 명령이 완료된 후라고 생각합니다.busybox
sh
tee
cat $logfile
busybox
또 다른 가능성은 호출 에 대한 링크를 생성 tee
하고 실행해 보는 것입니다. busybox
내 데비안 버전은 이것을 지원하지만, 당신의 버전도 지원하는지 모르겠습니다:
ln -s /bin/busybox /bin/tee
tee
그런 다음 정상적으로 실행 해 보십시오 .
정말로 그것을 얻을 수 없다면 tee
, 유일한 다른 옵션은 다음과 같습니다:
foo=$( ( time dd if="file1" of="file2" bs=12 count=5 ) 2>&1 &)
echo "$foo"
echo "$foo" >> logfile
답변2
이 명령을 사용할 수 있습니다 tee
. 여기서는 명령을 그룹화 time
하고 dd
코드 블록을 사용하여 단일 명령으로 처리하고 해당 출력을 쉽게 처리할 수 있도록 했습니다.
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1|tee $log_file
;
두 번째 명령의 끝부분 을 기록해 두십시오 . 이는 코드 블록이 제대로 작동하는 데 필요합니다.
사용하고 싶지 않다면 tee
이것을 고려할 수도 있습니다
{ time dd of=$dest_filepath if=$src_filepath bs=$block_size count=$block_count; } 2>&1 &> $log_file;cat $log_file