Summary: | read builtin doesn\'t work if its input comes from a pipe | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | imz <vanyaz> |
Component: | bash | Assignee: | placeholder <placeholder> |
Status: | CLOSED NOTABUG | QA Contact: | |
Severity: | major | ||
Priority: | P4 | CC: | glebfm, ldv, placeholder |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
imz
2002-02-23 17:50:41 MSK
See /usr/share/doc/bash-2.05/FAQ: E4) If I pipe the output of a command into `read variable\', why doesn\'t the output show up in $variable when the read command finishes? This has to do with the parent-child relationship between Unix processes. It affects all commands run in pipelines, not just simple calls to `read\'. For example, piping a command\'s output into a `while\' loop that repeatedly calls `read\' will result in the same behavior. Each element of a pipeline runs in a separate process, a child of the shell running the pipeline. A subprocess cannot affect its parent\'s environment. When the `read\' command sets the variable to the input, that variable is set only in the subshell, not the parent shell. When the subshell exits, the value of the variable is lost. See /usr/share/doc/bash-2.05/FAQ: E4) If I pipe the output of a command into `read variable\', why doesn\'t the output show up in $variable when the read command finishes? This has to do with the parent-child relationship between Unix processes. It affects all commands run in pipelines, not just simple calls to `read\'. For example, piping a command\'s output into a `while\' loop that repeatedly calls `read\' will result in the same behavior. Each element of a pipeline runs in a separate process, a child of the shell running the pipeline. A subprocess cannot affect its parent\'s environment. When the `read\' command sets the variable to the input, that variable is set only in the subshell, not the parent shell. When the subshell exits, the value of the variable is lost. |