Vadym Chepkov wrote: > I found out a very unusual feature of bash which makes it to act > really unexpected. I understand that pipelines are executed in a > separate subshell, but I really think 'exit' command should be > absolute. Consider a trivial code:
Note that dash also behaves this way too. > #!/bin/bash > > echo Start > ps -ef | while read proc > do > echo $proc > exit 1 > done > echo Continue > > I would expect never see "Continue" printed, I didn't put any > conditional checks to simplify the example, but I really expect the > script to be completely aborted when it gets to 'exit', not having > to add additional checks or replace pipeline with temporary files This is a variation on Bash FAQ E4. Pipes create subshells. You can avoid this by avoiding piping to the while loop. Instead use a redirection and no subshell will be created. #!/bin/bash echo Start while read proc do echo $proc exit 1 done < <(ps -ef) echo Continue The "<(command)" syntax is documented in the Process Substitution section of the manual. Bob