We don't know the size of `cmd1`'s output but pipes have a limited buffer size. For very large data, use a temporary file. Else, use this: result=$(cmd1) && cmd2 <<< "$result" unset result