¿Por qué no funciona esta declaración fuente?

¿Por qué no funciona esta declaración fuente?

El archivo tmp.shcontiene:

func() {
   ls
}

Si el archivo se obtiene mediante source tmp.sh, la función funcfunciona bien.

Sin embargo, si el abastecimiento se realiza como cat tmp.sh | source /dev/stdinquejas bash:

-bash: func3: comando no encontrado

¿Cuál es la diferencia entre los dos métodos de abastecimiento? Desde sourcela perspectiva de no debería haber ninguna diferencia ya que /dev/stdintambién sería un identificador de archivo.

Respuesta1

Desde fiesta (1):Cada comando en una canalización se ejecuta como un proceso separado (es decir, en una subcapa).

El shell principal no tiene acceso a las definiciones de sus subshells.

información relacionada