GNU/Linux >> Linux Esercitazione >  >> Linux

Input standard multiplo? Come?

Questo non è un input standard multiplo. Questo è un bash'ismo chiamato 'Process Substitution'http://tldp.org/LDP/abs/html/process-sub.html

Crea uno pseudo file (/dev/fd/something ) per ogni sostituzione. È piuttosto utile. Il comando può essere letto solo come flusso, il che significa che non può andare avanti e indietro con fseek. Ha bisogno di leggerlo come un flusso di byte, come una pipe.

Risposta BONUS

Non è necessario fare troppo per usarlo. Per quanto riguarda il tuo script, ottiene un nome file valido sulla riga di comando, che può essere aperto () come qualsiasi altra cosa. Come altri hanno già detto, vedresti diff /dev/fd/XX /dev/fd/YY . Se esegui uno stat() su uno qualsiasi di questi pseudo-file, vedrai che è una pipe con nome e dovresti trattarla con la semantica della pipe, vale a dire no fseek() o ftell(). Se esegui un test stat() per vedere esplicitamente se si tratta di un file (ad es. [ -f $1 ] ) questo sarà break - questo è implementato dopo tutto come una named pipe.


<(...) elabora la sostituzione in bash. L'output del processo nelle parentesi viene inviato a un descrittore di file aggiuntivo oltre il normale 3 e viene restituito un nome file corrispondente a quel descrittore di file. In questo modo l'output di un comando può essere trattato come un nome file da passare a un altro comando.


C'è un stdin e un stdout per ogni processo . Di solito sono collegati al terminale, ma possono essere reindirizzati separatamente l'uno dall'altro.

Nell'esempio, ci sono due wget processi coinvolti, ognuno dei quali ottiene il proprio stdin e stdout . Ogni wget il processo scrive in - , che è il suo stdout . Quindi bash sostituzione del processo di <(...) connette il stdout del processo in uno pseudo-file univoco, da cui diff sa leggere. Nota che le due sostituzioni di processo producono due diversi pseudo-file! Quindi, diff vede qualcosa come:

diff /dev/fd/XX /dev/fd/YY

dove stdout di wget -q -O - URL1 è connesso a /dev/fd/XX e stdout di wget -q -O - URL2 a /dev/fd/YY .


Linux
  1. Come comprimere più file su Linux

  2. Come inviare Stdout a più comandi?

  3. Dd:file di input multipli?

  4. Come eseguire il processo Rsync in background

  5. Come ottenere l'ID processo del processo in background?

Come uccidere un processo zombie su Linux

Come digitare emoji su Linux

Come uccidere un processo in Linux

Come KILL un processo su Linux

Come unire più pagine PDF in una singola pagina

Come viene calcolata la priorità del processo?