Lost Assignment of var in shell for loop with stdout redirection
dce at mips.UUCP
dce at mips.UUCP
Sat Feb 7 00:33:37 AEST 1987
No, this is not considered to be a bug. When you do redirection or pipes
of any kind, the shell forks. This is done because getting back to the
original file state would be impossible if you tried to do it locally.
Basically, it would be almost impossible to handle the case in which
you execute
shell_script < foo > bar
if there was some internal redirection inside of the shell script.
The shell couldn't save the file descriptors somewhere else because
it would run out of descriptors (ever hear of the 'fd>file' syntax?).
Thus, the shell has to fork to the the redirection.
Now, if your problem is that you need a way to assign a variable
during a redirection and have that value available afterwards, you have
a couple of possibilities:
1. Place the variable value in a file, and use
VAR="`cat file`"
2. You can get tricky, as in
#!/bin/sh
exec 9>&1 # save stdout in fd 9
exec 1>bar # stdout->file "bar"
for i in 1 2 3 4 5
{
var="$i"
echo "hello" # output goes in file "bar"
}
exec 1>&9 # stdout->saved stdout
echo "$var"
I use file descriptor 9 here to stand out, but I believe that
all file descriptors other than 0, 1, and 2 are closed upon
execution of subprocesses, so you should be able to use anything
from 3 to 9 (2-digit fds are syntax errors). Can Guy or Doug
or someone verify this?
--
David Elliott
UUCP: {decvax,ucbvax,ihnp4}!decwrl!mips!dce, DDD: 408-720-1700
More information about the Comp.unix.wizards
mailing list