여러 순차 명령의 출력을 텍스트 파일에 기록


22

최신 Firefox를 확인하고 하나의 TXT 파일로 모든 해시를 가져 오려고합니다.

내가하려고하는 것은 :

sha1sum firefox.tar.gz > sha.txt

그리고 나는 또한 시도합니다 :

md5sum firefox.tar.gz > sha.txt | sha1sum firefox.tar.gz > sha.txt | sha512sum firefox.tar.gz > sha.txt 

그러나이 경우 sha512는 sha.txt에 인쇄됩니다.

내가 무엇을 잘못하고 있지? 저를 도와 줄 사람이 있습니까?

답변:


31

다른 사람들이 이미 >(덮어 쓰기)와 >>(추가) 리디렉션 연산자 의 차이점을 지적 했으므로 몇 가지 솔루션을 제공 할 것입니다.

  1. 의 명령 그룹화 {}기능을 사용하여 bash모든 명령의 출력을 단일 파일로 보낼 수 있습니다 .

    { sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ;} >checksum.txt
  2. 또는 서브 쉘에서 명령을 실행할 수 있습니다 ().

    ( sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ) >checksum.txt

1
어떤 솔루션이 더 일반적인 / 휴대용 {}또는 ()? 고맙습니다.
codeaviator 2018

5
@codeaviator 서브 쉘 : ().
heemayl

5

다음 명령 >>대신에 append 리디렉터를 사용해야합니다.>

sha1sum zeromq-4.1.2.tar.gz > sha.txt
md5sum zeromq-4.1.2.tar.gz  >> sha.txt 
sha512sum zeromq-4.1.2.tar.gz >> sha.txt 

Appending Redirected Outputbash 매뉴얼 페이지 ( man bash) 섹션을 참조하십시오 .


1

>리디렉터 명령의 출력 (쓰기 stdout,하지를 stderr- 사용2> 하는 경우) 뒤에 지정된 파일에. 이미 존재하면 파일을 덮어 씁니다.

이 동작은 첫 번째 명령에 유용합니다. 기존 파일이 있으면 삭제되고 새 파일로 대체되어야합니다.

그러나 이전 출력을 바꾸지 않고 모든 추가 출력을 추가해야하므로 append-redirector를 사용해야합니다 >>. 파일이 아직 없으면 파일을 작성하지만 파일이 이미 존재하는 경우 경로 재 지정된 출력을 파일에 추가 합니다.


파이프 |를 사용하여 여러 명령을 한 줄에 쓰지 마십시오 . 첫 번째 명령의 출력 ( stdout)이 두 번째 명령의 입력 ( stdin)으로 리디렉션됩니다 .

세미콜론 ( ;)을 사용하면 bash가 마치 스크립트 파일 인 것처럼 한 명령을 실행하도록 지시 할 수 있습니다. 명령이 실패하면 (반환 코드가 0이 아님) 나머지 명령은 여전히 ​​실행됩니다.

또는 논리 연산자 AND ( &&) 또는 OR ( ||)를 선택할 수 있습니다. 두 명령을 연결
하는 &&데 사용 하는 경우 두 번째 명령 은 첫 번째 명령이 성공한 경우 에만 실행 됩니다 (리턴 코드는 0 임). 실패하면 다음 명령이 실행되지 않습니다.
(가) ||하지만 에만 두 번째 명령을 실행하는 첫 번째 실패한 경우 (리턴 코드가 0이 아닌)!

따라서 귀하의 경우 세미콜론을 사용하는 것이 좋습니다.

md5sum firefox.tar.gz > sha.txt ; sha1sum firefox.tar.gz >> sha.txt ; sha512sum firefox.tar.gz >> sha.txt 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.