blob: ccc497d7be1f116c5da9dd9de3276ac4a5c71a07
1 | # Builds a " 3>&- 4>&-" string. |
2 | # Note: one of these fds is a directory opened to /proc/self/fd |
3 | # for globbing. It is unwanted, but I don't know how to filter it out. |
4 | find_fds() { |
5 | fds="" |
6 | for f in /proc/self/fd/*; do |
7 | test "$f" = "/proc/self/fd/0" && continue |
8 | test "$f" = "/proc/self/fd/1" && continue |
9 | test "$f" = "/proc/self/fd/2" && continue |
10 | fds="$fds ${f##*/}>&-" |
11 | done |
12 | } |
13 | |
14 | find_fds |
15 | fds1="$fds" |
16 | |
17 | # One of the fds is open to the script body |
18 | # Close it while executing something. |
19 | eval "find_fds $fds" |
20 | |
21 | # Shell should not lose that fd. Did it? |
22 | find_fds |
23 | test x"$fds1" = x"$fds" && { echo "Ok: script fd is not closed"; exit 0; } |
24 | |
25 | echo "Bug: script fd is closed" |
26 | echo "fds1:$fds1" |
27 | echo "fds2:$fds" |
28 | exit 1 |
29 | |
30 |