Hai ragione nel dire che i tuoi due primi on-line dovrebbero funzionare secondo bash semantica di sostituzione del processo . In mio testing ( bash
3.2 su OS X 10.8 .2), il secondo fa, mentre il primo no.
Nel caso del tuo primo one-liner, sembra che potresti incontrare una delle limitazioni della sostituzione del processo. Citando la pagina di Wikipedia sulla sostituzione del processo :
Process substitution has some limitations: the “files” created are not seekable, which means the process reading or writing to the file cannot perform random access; it must read or write once from start to finish. Programs that explicitly check the type of a file before opening it may refuse to work with process substitution, because the “file” resulting from process substitution is not a regular file.
- se source
è un comando che ha difficoltà con questo (almeno in bash
3.2), ciò spiegherebbe il suo fallimento nel lavorare con la sostituzione del processo.
Il secondo one-liner potrebbe apparire come fallito perché esegue il codice in una sottotitola invece di procurarselo. Se ti aspetti che imposti alias e funzioni, questo non funzionerà, poiché non vengono trasferiti alla shell genitore quando sono definiti in una subshell.
Il terzo liner non funziona perché source
non elabora stdin
- solo file (vedi bash pagina man ).