Test doppio reindirizzamento
-
30-09-2019 - |
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
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.