Mi chiedo come creare un tubo ditubo di linux con più programmi chiedere per l'input dell'utente
program 1 | ... | program N
dove multipla dei programmi chiedere per l'input dell'utente. Il problema è che |
avvia i programmi in parallelo e quindi iniziano a leggere dal terminale in parallelo.
Per tali casi sarebbe utile disporre di una pipe |
che avvii il programma (i + 1) solo dopo che il programma ha prodotto qualche output.
Edit:
Esempio:
cat /dev/sda | bzip2 | gpg -c | ssh [email protected] 'cat > backup'
Qui sia gpg -c
nonché ssh
chiedere una password.
Una soluzione per questo specifico esempio sarebbe la creazione di coppie di chiavi ssh, ma questo non è possibile su tutti i sistemi e mi chiedevo se esiste una soluzione generale. Anche gpg consente di passare la passphrase come argomento della riga di comando, ma questo non è consigliato per motivi di sicurezza.
Una volta che ci si connette un programma ad un tubo, si ottiene il suo ingresso da un altro programma, non l'utente. Sei sicuro di volere una pipa? Non riesco davvero a pensare a un programma che sia in grado di catturare l'input dell'utente * e * legge dallo standard input. – chepner
Non una risposta, ma un'idea che potrebbe indirizzarti nella giusta direzione: potresti includere il codice attorno a ciascun programma per controllare l'output di una particolare stringa, aggiornare un flag una volta trovato e avere l'altro loop di chiamate fino a quando la flag del programma precedente non è stata aggiornato, quindi consentire loro di correre? – JohnLBevan
Mostra un esempio specifico di questo evento. Un programma potrebbe leggere da 'stdin' e da'/dev/tty', ma ciò sarebbe inusuale. –