dd
를 사용하여 일부 파일을 만드는 bash 스크립트가 있습니다. 문제는 dd가 내 스크립트의 출력을 엉망으로 만들 엄청난 양의 출력을 던진다는 것입니다. 주변을 검색하면서 해결책을 찾았습니다.
dd if=boot1h of="/dev/r$temp1" >& /dev/null
대안이 있습니까, 아니면 /dev/null
로 리디렉션됩니까? 유일한 방법인가요?
댓글
(내 생각에). ' 어떻게 억제하더라도 dd
를 수행해야합니다. div> '의 출력. 출력을 /dev/null
로 리디렉션하면 ' 루트가 필요하지 않습니다.
li>
정말 죄송합니다. 나는 ' 내가 아닌 ' 스크립트를 수정하고 있으며 ' 알지 못했습니다. . 정말 죄송합니다.
cat
, head
또는 tail
를 대신 사용하세요. 답변
dd(1)
매뉴얼 페이지에서 :
status=noxfer suppress transfer statistics
따라서
dd if=boot1h of="/dev/r$temp1" status=noxfer
이것은 여전히
0+1 records in 0+1 records out
dd
가 종료 될 때 쓰레기가 발생하므로 데이터 싱크로 리디렉션하는 것이 유일한 옵션입니다.
댓글
- 나는 ' 두려웠습니다.
- 나는 status = noxfer가 일반적으로 전송을 보여주는 SIGUSR1 신호와 관련이있을 수 있다고 생각합니다. 통계량. 어쨌든, ' 내 말이 사실인지 테스트하고 싶지 않습니다.
답변
status=none
추가 :
dd if=boot1h of="/dev/r$temp1" status=none
dd (coreutils) 8.21 문서 :
"status=LEVEL" Transfer information is normally output to stderr upon receipt of the "INFO" signal or when "dd" exits. Specifying LEVEL will adjust the amount of information printed, with the last LEVEL specified taking precedence. "none" Do not print any informational or warning messages to stderr. Error messages are output as normal. "noxfer" Do not print the final transfer rate and volume statistics that normally make up the last status line. "progress" Print the transfer rate and volume statistics on stderr, when processing each input block. Statistics are output on a single line at most once every second, but updates can be delayed when waiting on I/O.
댓글
- @roaima-궁금합니다. 맨 페이지에서 인용문을 편집하는 이유는 무엇입니까?
- @don_crissti 맨 페이지에서 인용문을 추출 할 때 컨텍스트가 (부족함)은 약간 다른 형태의 단어가 필요하다는 것을 느꼈습니다. 맨 페이지 에있는 것처럼 ' 괜찮습니다. 여기서 이상해 보였습니다.
- @roaima-좋습니다-호기심 만족 :)-하지만
info page
에 연결되어 있습니다. 여기의 초기 답변에는man page
의 정확한 인용문 이 있습니다.man
페이지가 모호하지만 실제로는 당신에게 달려 있다면info
페이지에서 직접 복사 / 붙여 넣기했을 것입니다. 오, btw, 요일별 정렬과 관련된 내 답변에 대한 다른 의견을 보내 주셔서 감사합니다. - dd (coreutils) 8.13에서 사용할 수없는 것 같습니다 ' :
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO 이것은 허용되는 답변이어야합니다.
답변
향후 참조 :
dd 출력을 억제하려면 stderr를 다음과 같이 / dev / null로 완전히 리디렉션합니다.
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
예를 들어 bash에서 time 명령을 사용하여 프로세스의 시간을 측정하고 dd가 생성하는 출력을 얻지 않고 결과를 변수에 할당하려는 경우이 방법이 잘 작동합니다.
reference : http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
답변
최신 버전의 BASH 및 ZSH에서도 이와 같은 기능이 작동합니다.
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. 이것은 내가 실행 한 예제 일뿐입니다 …
Answer
모든 Unix 응용 프로그램 또는 명령을 사용하여 다음을 사용하여 모든 출력을 억제 할 수 있습니다.
cmd >/dev/null 2>&1
첫 번째 비트는 표준 출력 (단위 번호 1)을 / dev / null로 리디렉션합니다. 그러나 오류 출력 (장치 번호 2)을 1 번과 같은 위치로 리디렉션하려면 두 번째 부분도 필요합니다.
UNIX에서는 STDIN = 0, STDOUT = 1 및 STDERR = 2
댓글
- 사실,
stderr
에는 파일 설명자 2 가 있습니다. (" STDERR = 3 "는 오타 일 뿐이라고 가정합니다.) - 모든 출력을 억제하는 것은 바람직하지 않습니다. . 오류가 발생하면 오류 메시지를보고 싶습니다.
-
cmd 2>logfile.txt
가 더 수정 된 것 같습니다
답변
당신이하려는 작업을 정확하게 이해했다면 sudo
명령을 스크립트에 넣고 실행될 때 암호를 묻는 스크립트? 이 경우 복잡한 방식으로 작업을 수행합니다.
더 깨끗한 해결책은 일반적인 방식 (즉, sudo
없이) 및 수퍼 유저로 실행 합니다. 그 이유는 스크립트에 수퍼 유저 액세스가 필요한 경우 액세스 권한을 부여하기 때문입니다 (왜 특정 명령이 나올 때까지 기다리나요?). 스크립트에서 루트로 실행되고 있는지 확인하려면 다음과 같이하십시오.
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
댓글
- 아니요. ' 정확히 제가하고 싶지 않은 '입니다. dd가 출력을 표시하지 않도록 ' 스크립트가 루트로만 실행되는 것을 원하지 않습니다. ' 스크립트가 수퍼 유저로 실행되도록하려면 확인이 수정됩니다.
- @dierre 그렇다면 처음에
sudo
가 필요한 이유는 무엇입니까? 일반 사용자는 문제를/dev/null
로 리디렉션 할 수 있어야합니다. - ' Ubuntu를 사용하고 있습니다. ' 작업이 허용되지 않습니다 … 음 …
- ' 죄송합니다. ' / dev / 아래에 무언가를 만들고 있다는 것을 알지 못했습니다. 대본은 내 것이 아니라 편집 중이었습니다. ' 정말 죄송합니다.
답변
출력을 일반 파일로 리디렉션합니다. 예 :
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
로 리디렉션 중-dd
에 iv에 대한 쓰기 액세스 권한이 필요하기 때문에 ' sudoing id = “e53e6293e6″>