Um comando deseja caminhos de arquivo. Como posso dar stdin para o "infile" e stdout para o "outfile"?

1

Considere um comando como foo -in /path/to/infile -out /path/to/outfile , para o qual você gostaria de passar strings em vez de usar arquivos temporários. Pode ser chamado de muito, causando muito acesso ao disco, ou está relacionado à criptografia, onde você não quer gravar dados confidenciais em disco (ou lidar com discos criptografados e / ou ram, etc).

Existe uma maneira de dar stdin e obter a saída em stdout ,
algo como echo "abc" | foo -in &0 -out &1 ?

Sei que existem descritores de arquivos para os quais você pode redirecionar dados, como echo "foo" 1>&2 . E que coisas como xargs podem passar strings como argumentos. Mas é possível passar um descritor de arquivo padrão como um caminho de arquivo de alguma forma? Se eu puder ler e escrever em stdin / out como um arquivo, por que não conseguir obter o caminho de arquivo "virtual"?

    
por Beejor 23.11.2018 / 04:01

1 resposta

1

Você pode usar arquivos especiais /dev/stdin ou /dev/fd/0 para stdin e /dev/stdout ou /dev/fd/1 para stdout.

No seu exemplo:

echo "abc" | foo -in /dev/fd/0 -out /dev/fd/1

A disponibilidade desses arquivos especiais depende do O.S. você está ligado, mas no Linux (e na maioria das distribuições Linux) você não deve ter problemas para encontrá-los ou usá-los.

Esses arquivos são "virtuais", no sentido de que escrever para um deles não grava dados no disco. A abertura de um desses arquivos especiais equivale a chamar o dup (2) syscall, que duplica o descritor de arquivo existente para um novo.

    
por 23.11.2018 / 04:16