> cd does not seem to do its thing when stdout is redirected to a pipe, > however it does work with a (temporary) file: > > cd bad > cd.out 2>&1 > cat cd.out > rm cd.out
I ultimately came up with this variant: #!/bin/bash LOG_FILE="/home/stefan/log/output.log" TEMP_LOG="/home/stefan/log/temp.log" function handle { if [ -f $TEMP_LOG ] then cat $TEMP_LOG | tee -a $LOG_FILE fi exit 1 } function clean { rm -f $TEMP_LOG } trap handle ERR trap clean EXIT # do some stuff cd nonexistent > $TEMP_LOG 2>&1 # do some more stuff It might seem like an overkill, but since I'm using the error handling in my script anyway it's actually a nice way to keep the noise (cat & rm) out of my main function. Of course this variant only logs the errors of a cd call, but since cd usually doesn't produce any meaningful output to stdout this seems quite okay to me. If you were to use a command which changes the state of the current shell and provides meaningful output to stdout and you'd want to pipe it, you'd just have to use the above three-liner consecutively or come up with some other variant. Stefan -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]