コマンド間でファイルを渡すことはできますか?

コマンド間でファイルを渡すことはできますか?

生成されたファイルをあるコマンドから別のコマンドに送信する方法を探しているので、その間にディスクにコピーを保存する必要はありません。たとえば、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

関連情報