Unix wrapper para fazer qualquer binário aceitar redirecionamento stdin / stdout

1

Esta é uma situação comum: você deseja incluir o comando 'foo' como parte de um pipeline, mas infelizmente o comando 'foo' só aceita nomes de arquivos reais para E / S e não lê / escreve de stdin / stdout. Eu sei que há um comando do Unix que funciona como um wrapper para comandos mal comportados, como 'foo', mas não consigo lembrar seu nome. O que é isso?

    
por Jon Smark 18.04.2012 / 18:04

2 respostas

4

Supondo que foo esteja usando -i para seu arquivo de entrada e -o para sua saída, isso deve convertê-lo em um programa adequado para um pipeline:

previousCommand | foo -i <(cat) -o >(cat) | nextCommand

Isso é chamado de substituição de processo e, embora não seja padrão, está disponível pelo menos com ksh e bash.

Em casos simples como o exemplo anterior, o pipeline pode ser reduzido assim:

foo -i <(previousCommand) -o >(nextCommand)
    
por 18.04.2012 / 18:14
0

Eu acho que você quer mkfifo , que pode criar pipes nomeados que funcionam como arquivos.

Exemplo:

mkfifo mypipe
perl mypipe & # awaits input from pipe file
echo "print 55;" > mypipe

ls -l mypipe # should be prefixed with a p denoting the inode is a pipe:
prw-r--r-- 1 user1 user1 0 Apr 18 12:10 mypipe
    
por 18.04.2012 / 21:14