2011-06-06 12 views

Respuesta

9

Todos los componentes de una tubería (si hay más de uno) se ejecutan en una subcapa, y sus asignaciones de variables no persisten a la carcasa principal.

La razón de esto es que la fiesta no soporta multithreading real (con acceso simultáneo a las variables), sólo los subprocesos que se ejecutan en paralelo.


¿Cómo evitar este:

Tienes que hacer cualquier asignación variable que desea conservar en el proceso principal fiesta (o encontrar alguna manera de trasladarlos allí). La forma de la fiesta de hacerlo sería no utilizar un tubo, pero la sustitución proceso de uso en su lugar:

f > >(cat) 

Por supuesto, esto no va a ayudar si lo que necesita hacer asignaciones de variables en ambos procesos de una tubería. Entonces debe pensar en un mejor mecanismo en su lugar (tal vez coprocesos, y generar las variables en alguna parte?)

+1

En realidad, esto se aplica a todos los elementos de una tubería * incluyendo * la última. –

+0

Hmm, extraño ... ¿de dónde saqué la impresión equivocada? Gracias, cambié esto. –

+1

ŭlo: Algunos shells (ksh y zsh, creo, pero no bash) ejecutan el último elemento de la canalización en el proceso del shell principal. – camh

Cuestiones relacionadas