표준 출력 리디렉션 또는 파이프에서 임시 파일 만들기

표준 출력 리디렉션 또는 파이프에서 임시 파일 만들기

일부 명령은 stdout으로만 출력됩니다.
일부 도구는 파일에만 작동합니다.
서로 붙이는 명령이 있나요?

고안된 간단한 예:

diff $(echo 1 | stdout-to-temp-file) $(echo 2 | stdout-to-temp-file)

내 실제 사용 사례: 현재 해결 방법:

git show HEAD:$1 > /tmp/left && meld /tmp/left $1

내 실제 사용 사례는 다음과 같습니다.

meld $(git show HEAD:$1 | stdout-to-temp-file) $1

몇 가지 다른 상황에서도 사용할 것입니다(예: git 또는 meld 전용 수정을 찾고 있지 않습니다).

답변1

<출력을 로 리디렉션 할 수 있습니다 stdin.

어떻게 작동하는지 모르겠지만 melddiff 예제와 관련하여 작동 방식은 다음과 같습니다.

임시 파일 사용

$ cmd1 > file1.tmp
$ cmd2 > file2.tmp
$ diff file1.tmp file2.tmp

임시 파일 없음

$ diff <(cmd1) <(cmd2)

사용 중인 셸에 따라 구문이 다를 수 있습니다(저는 ksh88을 사용하고 있습니다).

답변2

mktemp임시 파일 이름이 생성됩니다. 파일 이름을 변수에 저장하고 두 슬롯 모두에서 해당 파일 이름을 사용하십시오.

특정 문제를 더 잘 해결하려면 다음을 검토하세요.git difftool. Meld를 ​​사용하도록 설정했는데 훌륭합니다.

답변3

나는 meld를 사용한 적이 없지만 일반적으로 대부분의 cli 유틸리티의 - 매개변수를 사용하여 이 작업을 수행할 수 있습니다. 예를 들어

cat /path/to/left/file | diff /input/from/right/file -

특히 meld 명령의 경우 다음을 시도해 볼 수 있습니다.

git show HEAD:$1 | meld - $1

관련 정보