임시 파일이 없는 두 프로그램의 다른 출력
프로그램이 너무 많다고 말합니다.a
그리고.b
함께 달릴 수 있는./a
그리고../b
.
임시 파일에 먼저 쓰지 않고 출력을 분산할 수 있습니까?
사용하다<(command)
파일 이름인 것처럼 한 명령의 출력을 다른 프로그램에 전달합니다.Bash는 프로그램의 출력을 파이프에 연결하고 다음과 같은 파일 이름을 전달합니다./dev/fd/63
외부 명령으로
diff <(./a) <(./b)
마찬가지로 사용할 수 있습니다.>(command)
명령에 연결하려면 다음과 같이 하십시오.
이것은 Bash의 man 페이지에서 "Process Substitution"이라고 불립니다.
두 답변에 모두 추가하여 나란히 비교하려면 다음을 사용합니다.vimdiff
:
vimdiff <(./a) <(./b)
이와 같은 것:
한 가지 옵션은 명명된 파이프(FIFO)를 사용하는 것입니다.
mkfifo a_fifo b_fifo
./a > a_fifo &
./b > b_fifo &
diff a_fifo b_fifo
Fish shell을 사용하여 프로세스 대체를 수행하는 방법은 다음과 같습니다.
배쉬:
diff <(./a) <(./b)
물고기:
diff (./a | psub) (./b | psub)
불행히도 물고기에 대한 구현은 현재 부족합니다. 물고기는 매달리거나 디스크의 임시 파일을 사용합니다.또한 명령 출력에 psub를 사용할 수 없습니다.
이미 좋은 답변에 조금 더 추가(도움이 되었습니다!):
명령어docker
에 대한 도움말을 출력합니다.STD_ERR
(즉, 파일 설명자 2)
나는 그것을 보고 싶었습니다.docker attach
그리고.docker attach --help
동일한 출력을 제공했습니다.
$ docker attach
$ docker attach --help
이 두 명령을 입력한 후 다음 작업을 수행했습니다.
$ diff <(!-2 2>&1) <(!! 2>&1)
!-1과 동일합니다. 이 명령 앞에 명령 1을 실행합니다. - 마지막 명령입니다.
!-2는 이 명령 앞에 명령 2를 실행하는 것을 의미합니다.
&1은 file_descriptor 2 출력(STD_ERR)을 file_descriptor 1 출력(STD_OUT)과 동일한 위치로 전송하는 것을 의미합니다.
이것이 도움이 되었기를 바랍니다.
zsh의 경우, 사용=(command)
자동으로 임시 파일을 만들고 대체합니다.=(command)
파일 자체의 경로를 사용합니다.일반적인 프로세스 대체를 사용할 경우$(command)
명령 출력으로 대체되었습니다.
이 zsh 기능은 매우 유용하며, Beyond Compare와 같은 diff 도구를 사용하여 두 명령의 출력을 비교하는 데 사용할 수 있습니다.
bcomp =(ulimit -Sa | sort) =(ulimit -Ha | sort)
Beyond Compare의 경우 다음을 사용해야 합니다.bcomp
위와 같은 경우에는bcompare
)이후bcomp
비교를 시작하고 완료될 때까지 기다립니다.사용하는 경우bcompare
비교가 시작되고 명령 출력을 저장하기 위해 만든 임시 파일이 사라지기 때문에 즉시 종료됩니다.
여기서 더 읽기: http://zsh.sourceforge.net/Intro/intro_7.html
또한 다음 사항에 유의하십시오.
셸은 임시 파일을 만들고 명령이 완료되면 해당 파일을 삭제합니다.
은 그고다사차이다니입이의 입니다.$(...)
그리고.=(...)
:
zsh의 man 페이지를 읽으면 <(...)가 =(...)와 유사한 또 다른 프로세스 대체 형태임을 알 수 있습니다.그 둘 사이에는 중요한 차이가 있습니다.<(...)의 경우 셸은 파일 대신 명명된 파이프(FIFO)를 생성합니다.이것은 파일 시스템을 가득 채우지 않기 때문에 더 낫지만 모든 경우에 작동하지는 않습니다.실제로 위의 예에서 =(...)를 <(...)>로 교체했다면 fgrep -f <(...)를 제외하고는 모두 작동을 멈췄을 것입니다.파이프를 편집하거나 메일 폴더로 열 수 없습니다. 그러나 fgrep은 파이프에서 단어 목록을 읽는 데 문제가 없습니다.foo | diff - bar가 작동하기 때문에 diff <(foo) bar가 작동하지 않는 이유는 diff가 인수 중 하나가 -임을 알아차린 후 표준 입력을 임시 파일로 복사하기 때문입니다.
언급URL : https://stackoverflow.com/questions/3800202/diff-output-from-two-programs-without-temporary-files
'programing' 카테고리의 다른 글
C#에서 줄 바꿈을 추가하는 방법.NET 문서 (0) | 2023.05.02 |
---|---|
MongoDB는 Ubuntu에서 루트로 실행될 때만 작동합니다 - 데이터 디렉토리 문제 (0) | 2023.05.02 |
ng serve 명령을 실행할 때 "포트 4200이 이미 사용 중" (0) | 2023.04.27 |
스위프트에서 완료 핸들러로 함수를 만들려면 어떻게 해야 합니까? (0) | 2023.04.27 |
새 줄로 내용을 unix 변수에 파일로 저장 (0) | 2023.04.27 |