저는 Java 래퍼 convert
(이미지 매직의 일부)를 작성 중입니다. 내가 하고 싶은 것은 convert -thumbnail 1024 test.JPG >(cat)
썸네일 바이트 스트림을 표준 출력으로 인쇄하도록 명령을 호출하는 것입니다. 나중에 이 스트림에서 읽고 Blob Storage에 저장하려고 합니다. 위의 명령은 바이너리 데이터를 처리하지 못하는 것 같아서 사용하는데 문제가 있습니다. 바이트를 인쇄한 후 다음과 같은 내용도 인쇄합니다 62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c
.
나는 디렉토리 권한을 다루고 싶지 않기 때문에 임시 파일에 쓰는 것을 피하고 싶습니다.
내 명령에 내가 뭘 잘못하고 있는 걸까? 바이너리 데이터를 처리할 수 없는 건가요 cat
, 아니면 다른 이유 때문인가요?
답변1
~에서명령줄 처리의 출력 파일 이름 부분웹 페이지:
표준 출력
Unix에서는 한 명령의 출력을 다른 명령으로 파이프할 수 있습니다. ImageMagick을 사용하면 하나의 명령을 파일 이름이 있는 다른 명령으로 파이프할 수 있습니다.
이 예에서는 Convert의 출력을 디스플레이 프로그램으로 파이프합니다.
magick logo: gif:- | display gif:-
그러면 명령줄은 다음과 같이 시작할 수 있습니다.
convert -thumbnail 1024 test.JPG -
...또는 올바른 접두어를 사용하여 다른 형식으로 변환하도록 선택합니다.
convert -thumbnail 1024 test.JPG png:-
...이 시점에서 해당 출력을 blob-store-reader로 파이프할 수 있습니다.
convert -thumbnail 1024 test.JPG - | blob-store-reader
답변2
cat
줄과 텍스트용으로 설계되었지만 일부 제어 문자 이외의 이진 데이터 처리에는 신경 쓰지 않습니다. 이는 터미널(일반 표준 출력)이 이진 데이터를 처리할 수 없어 중단될 수 있는 경우입니다.
그런데 원하는 출력 파일에 "프로세스 대체"를 사용하는 것은 경치 좋은 길을 택하는 것과 같습니다. 그리고 올바르게 사용해야 하며 >
리디렉션을 위해 다른 것을 추가해야 합니다. 그런데 왜? man convert
:
표준 입력 또는 출력의 경우 "file"을 "-"로 지정하십시오.