Domanda

Cosa stampare la shell?

echo foo | while read line; do echo $line; done < <(echo bar)

mi aspetto di valutare a echo foo | bar o foo < <(bar), entrambi i quali si tradurrebbe in un messaggio di errore.

In Bash 4.1.5 sembra che il tubo viene semplicemente scartato:

bar

In Dash:

sh: Syntax error: redirection unexpected
È stato utile?

Soluzione

Dash non supporta la sostituzione di processo (<()).

Il comportamento che stai vedendo è coerente se si utilizza la sintassi che è sostenuto da ciascuno dei gusci si sta confrontando. Prova questo:

echo hello | cat < inputfile

Si dovrebbe vedere il contenuto di "file-input" e non "ciao". Da diversi proiettili che ho provato, solo Z shell mostrato sia.

Questo è quello che dice POSIX per quanto riguarda tubazioni e reindirizzamento:

  

Lo standard output di comando1 è collegata all'ingresso standard command2. Lo standard input, standard output o entrambi di un comando sono considerati essere assegnato dal gasdotto prima qualsiasi reindirizzamento specificato da operatori di reindirizzamento che fanno parte del comando (vedi reindirizzamento).

I interpretare questo significa che nel caso dell'esempio precedente, le assegna gasdotti stdin per cat poi le sostituzioni di reindirizzamento di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top