Tienes razón en que tus dos primeros en línea deberían estar funcionando según bash semántica de sustitución de procesos . En my testing ( bash
3.2 en OS X 10.8 .2), el segundo lo hace, mientras que el primero no.
En el caso de su primera línea, parece que se está ejecutando en una de las limitaciones de la sustitución de procesos. Citando la página de Wikipedia sobre la sustitución de procesos :
La sustitución del proceso tiene algunas limitaciones: los "archivos" creados no se pueden buscar, lo que significa que el proceso de lectura o escritura en el archivo no puede realizar un acceso aleatorio; Debe leer o escribir una vez de principio a fin. Los programas que comprueban explícitamente el tipo de un archivo antes de abrirlo pueden negarse a trabajar con la sustitución de procesos, porque el "archivo" resultante de la sustitución de procesos no es un archivo normal.
: si source
es un comando que tiene dificultades con esto (al menos en bash
3.2), eso explicaría su incapacidad para trabajar con la sustitución de procesos.
El segundo one-liner posiblemente parezca fallar porque ejecuta el código en una subshell en lugar de buscarlo. Si espera que establezca alias y funciones, esto no funcionará, ya que no se transfieren al shell principal cuando se define en una subshell.
El tercer one-liner no funciona porque source
no procesa stdin
- solo archivos (vea bash página de manual ).