Como posso configurar um dispositivo de leitura / gravação que gera um programa?

0

Não sei se isso é possível, mas não fazia ideia de como pesquisar esse conceito. É possível e se como eu ...

criar um arquivo de dispositivo (por exemplo, /dev/remoteclip ) que, quando gravado ou lido, gerará um programa ou script de shell?

O caso de uso estaria no compartilhamento de texto para uma área de transferência remota. Por exemplo, vi que eu tenho um Mac ao lado da minha caixa Linux. Como está, posso fazer o seguinte para compartilhar conteúdo:

$ ssh macbox "pbcopy" < myFile
$ ssh macbox "pbpaste" > myFile

Eu estou querendo saber se é possível ter um dispositivo ou FIFO no sistema de arquivos linux que, quando você escreve nele, executaria o comando ssh:

$ cat myFile >> /dev/macbook-clipboard
$ cat /dev/macbook-clipboard > myFile

Dessa forma, editores e outros programas podem simplesmente escrever em um dispositivo / FIFO.

Este é mais um exercício de aprendizagem sobre se isso é possível e, em caso afirmativo, como. Não é uma necessidade e provavelmente os méritos disso são puramente acadêmicos e úteis em fluxos de trabalho típicos.

    
por Sukima 21.10.2017 / 18:43

1 resposta

0

Eu encontrei uma maneira de conseguir isso. Isso requer a criação de um processo em segundo plano que continue a ler a partir do FIFO. Por exemplo:

$ mkfifo hopper
$ while :; do ssh macbox "pbcopy"; done < hopper &
$ cat myFile >> hopper

(Agradecemos a esta resposta do SO )

Agora eu não entendo completamente isso, mas estou disposto a adivinhar que ter o < hopper no loop while bloqueia o loop, e é por isso que o CPU não parece fritar um ovo e quando não há dados sendo canalizada para o FIFO, não há uma sessão SSH perdida por aí.

Estou bastante impressionado com o quão pensativo e avançado está pensando em todas essas ferramentas * Unix. Eu sinceramente não entendo por que isso é ensinado na escola ou por que o desenvolvimento moderno de software tem tudo a ver com a reinvenção dessas rodas antigas. Incrível!

Para finalizar o processo acima, use kill %1 .

    
por 22.10.2017 / 03:14