You want to capture the output with a redirect, but you’re typing several commands
on one line.
$ pwd; ls; cd ../elsewhere; pwd; ls > /tmp/all.out
The final redirect applies only to the last command, the last ls on that line. All the
other output appears on the screen (i.e., does not get redirected).
Solution:
Use braces { } to group these commands together, then redirection applies to the
output from all commands in the group. For example:
$ { pwd; ls; cd ../elsewhere; pwd; ls; } > /tmp/all.out
There are two very subtle catches here. The braces are actually
reserved words, so they must be surrounded by white space. Also, the
trailing semicolon is required before the closing space.
Alternately, you could use parentheses ( ) to tell bash to run the commands in a subshell,
then redirect the output of the entire subshell’s execution. For example:
$ (pwd; ls; cd ../elsewhere; pwd; ls) > /tmp/all.out