Comment puis-je diffuser des données vers un programme qui s'attend à lire des données à partir d'un file donné comme argument?

J'ai un énorme file gzip et je veux un programme (4s-import dans ce cas) pour le lire. Il faut d'abord beaucoup de time pour décompresser le file, puis appeler le programme avec le path d'access au file en tant qu'argument. Serait-il possible de faire quelque chose comme:

zcat huge.gz | 4s-import <SOME MAGIC> 

où SOME-MAGIC est comme un path vers un file abstrait contenant stdin?

L'alternative beaucoup plus lente et plus gourmande en espace disque que je dois faire autrement est:

 zcat huge.gz > huger 4s-import huger 

Vous pouvez utiliser l'opérateur de substitution de process <() de bash (ou zsh ):

 4s-import <(zcat huge.gz) 

Cet opérateur créera un fifo /dev/fd/NN temporaire et replacea <(.) la string /dev/fd/NN . 4s-import peut maintenant ouvrir /dev/fd/NN et lire à partir de cette fifo, alors que bash va lancer zcat huge.gz , qui envoie sa sortie à /dev/fd/NN .

  1. De nombreux programmes ont une input standard. Si c'est le cas, utilisez-le comme "embedded".

  2. Vous pouvez également essayer d'utiliser /dev/stdin ou /dev/fd/0 comme file.

  3. Une troisième option consiste à utiliser mkfifo pour créer un file spécial mkfifo . Dans un seul shell, vous pouvez gunzip > your_fifo_file vos données (par exemple, gunzip > your_fifo_file ), tandis que dans l'autre vous appelez votre programme avec le fifo comme file.