On Wed, May 10, 2017 at 8:07 PM, Aldo Davide <aldodav...@gmx.com> wrote:
> Configuration Information [Automatically generated, do not change]: > Machine: x86_64 > OS: linux-gnu > Compiler: x86_64-pc-linux-gnu-gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' > -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' > -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' > -DSHELL -DHAVE_CONFIG_H -I. -I./include -I. -I./include -I./lib > -DDEFAULT_PATH_VALUE='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' > -DSTANDARD_UTILS_PATH='/bin:/usr/bin:/sbin:/usr/sbin' > -DSYS_BASHRC='/etc/bash/bashrc' -DSYS_BASH_LOGOUT='/etc/bash/bash_logout' > -DNON_INTERACTIVE_LOGIN_SHELLS -DSSH_SOURCE_BASHRC -O2 -march=native -pipe > -Wno-parentheses -Wno-format-security > uname output: Linux mycomputer 4.9.24 #8 SMP PREEMPT Tue Apr 25 11:19:58 > EEST 2017 x86_64 Intel(R) Core(TM) i7-2670QM CPU @ 2.20GHz GenuineIntel > GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 4.4 > Patch Level: 12 > Release Status: release > > Suppose that you use a "varname" redirection when executing a simple > command, e.g.: > > ls -lh /proc/self/fd {var}>/dev/null > > I was surprised to discover that the file descriptor remains open after > the command has completed, as evidenced by issuing the following (works > on linux) immediately afterwards: > > echo "var is $var" > ls -lh /proc/$$/fd > > This is unlike what happens with standard redirections, e.g.: > > ls -lh /proc/self/fd 57>/dev/null > ls -lh /proc/$$/fd > > The same problem exists when braces are used to group (possibly) > multiple commands: > > { ls -lh /proc/self/fd; } {var}>/dev/null > echo "var is $var" > ls -lh /proc/$$/fd > > On the other hand, everything works just fine with subshells: > > (ls -lh /proc/self/fd) {var}>/dev/null > echo "var is $var" > ls -lh /proc/$$/fd > > As a side-note, in the subshell example the variable var will be > undefined in the second line, but defined inside the subshell. With > groups it will remain defined after the group: > > { echo "inside the grouping: $var1"; } {var1}>/dev/null > echo "outside the grouping: $var1" > (echo "inside the subshell: $var2") {var2}>/dev/null > echo "outside the subshells: $var2" > > So in summary, I would expect groups to work like subshells, both in > regards to closing the file descriptor but also in regards to the scope > of the variable. > > See: https://lists.gnu.org/archive/html/bug-bash/2012-11/msg00040.html Pierre PS: I'm with you ;)