명령 간에 파일을 전달할 수 있나요?

명령 간에 파일을 전달할 수 있나요?

생성된 파일을 한 명령에서 다른 명령으로 보내는 방법을 찾고 있으므로 그 사이에 디스크에 복사본을 저장할 필요가 없습니다. 예를 들어, rar디스크에 ed 파일이 있고 이를 열고 싶다면 다음과 같은 명령을 실행할 수 있기를 원합니다.

unrar x file.rar | kplayer

unrar x file.rar | gpg -c

gpg file.gpg | kplayer 

나는 당신이 내가 무엇을 찾고 있는지 이해한다고 확신합니다. unrarstdout으로 보내 려고 하는데 kplayer에 연결 -p해야 할 것 같은데 화면에만 보냅니다 . |제 생각에는 kplayer가 표준 입력에서 데이터를 가져올 수 없기 때문인 것 같습니다.

하지만 파일을 디스크에 저장하지 않고 다른 곳으로 전달할 수 있는 방법이 있습니까? 이것이 메모리에 파일시스템을 만들어서 사용할 수 있는 가장 좋은 방법이지만, 그렇게 많은 메모리를 유지한다는 생각은 마음에 들지 않습니다.

답변1

많은 명령에는 쓰기 옵션이 있습니다 STDOUT. 예를 들어 Unrar에는 이 p옵션이 있습니다. 많은 명령에는 -결합하여 읽을 수 있는 옵션이 있습니다 STDIN. 따라서 제공한 첫 번째 예는 다음과 같이 다시 작성할 수 있습니다.

unrar px file.rar | kplayer -

기본적으로 GPG는 이미 파이프 입력으로 작동합니다.

unrar px file.rar | gpg -c

명령의 도움말 및/또는 매뉴얼/정보 페이지가 결과 전송을 지원하는지 확인하십시오 STDOUT(많은 명령이 기본적으로 이를 수행함).

답변2

명령에 파일 이름만 필요한 경우 /dev/stdin또는 를 지정하십시오 /dev/fd/0. 이는 특수 파일입니다. 이를 열면 실제로 표준 입력이 복사됩니다. 일부 명령은 -표준 입력에 대한 별칭도 허용합니다.

unrar p foo.rar somefile | somecommand -
unrar p foo.rar somefile | somecommand /dev/stdin

때때로 프로그램은 파일 이름에 제한을 두며 종종 특정 확장자를 요구합니다. 심볼릭 링크로 속일 수도 있습니다.

ln -s /dev/stdin myfile.ext
unrar p foo.rar somefile | somecommand myfile.ext

일부 프로그램은 파이프 입력을 처리할 수 없기 때문에 이것이 항상 작동하는 것은 아닙니다. 검색 가능한 파일, 즉 마음대로 앞뒤로 이동할 수 있는 파일이 필요합니다. 이 경우 임시 파일을 생성해야 합니다.

경우에 따라 명령 출력이 아닌 일반 파일로 표시되도록 데이터를 정렬할 수 있습니다.퓨즈특히 다양한 컨텐츠를 일반 파일로 보이게 하는 것이 가능합니다. 예를 들어,AVFS, 아카이브 멤버는 파일로 표시됩니다.

mountavfs
cd "~/.avfs$PWD/foo.rar\#"
somecommand somefile

답변3

사용 중인 쉘이 지원하는 경우프로세스 교체, 이는 표준 입력에서 데이터를 가져올 수 없는 프로그램에 도움이 될 수 있습니다.

할 수 있어요kplayer <(unrar p file.rar)

매우 절망적이라면 사용할 수 있습니다메모리 디스크, 파일은 실제로 생성되지만 디스크에는 없습니다.

답변4

모든 사람의 의견에 감사드립니다. 제가 원하는 것을 쉽게 얻을 수 있는 방법은 없는 것 같습니다. ;(

다음 명령은 /dev/shm을 실행하고 사용해야 하므로 멋진 스크립트를 작성해야 합니다 :)

cp file.gpg /dev/shm && gpg -c file.gpg && rm file.gpg && kplayer file && rm file

관련 정보