쉘 스크립트에서 명령을 실행하고 있는데 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