I’ve grown fond of using a generator-like pattern between functions in my shell scripts. Something like this:
parse_commands /da/cmd/file | process_commands
However, the basic problem with this pattern is that if parse_command encounters an error, the only way I have found to notify process_command that it failed is by explicitly telling it (e.g. echo “FILE_NOT_FOUND”). This means that every potentially faulting operation in parse_command would have to be fenced.
Is there no way process_command can detect that the left side exited with a non-zero exit code?
Does the pipe process continue even if the first process has ended, or is the issue that you have no way of knowing that the first process failed?
If it’s the latter, you can look at the
PIPESTATUSvariable (which is actually a BASH array). That will give you the exit code of the first command:Otherwise, you’ll have to use co-processes.