Está en lo cierto que sus dos primeros on-liners debería trabajar de acuerdo con Bash semántica de sustitución de procesos . En mi pruebas ( bash
3.2 en OS X 10.8.2), el segundo sí, mientras que el primero no.
En el caso de tu primera línea, parece que te encuentras con una de las limitaciones de la sustitución de procesos. Citando el Página de Wikipedia sobre la sustitución de procesos :
La sustitución de procesos tiene algunas limitaciones: los "archivos" creados no son buscables, lo que significa que el proceso que lee o escribe 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 fracaso para trabajar con la sustitución de procesos.
La segunda línea posiblemente sólo parece fallar porque ejecuta el código en una subcapa en lugar de obtenerlo. Si esperas que establezca alias y funciones, esto no funcionará, ya que estos no se trasladan a la shell padre cuando se definen en una sub-shell.
La tercera línea no funciona porque source
no procesa stdin
- sólo archivos (ver página de bash man ).