diff options
author | Dave Reisner <dreisner@archlinux.org> | 2012-04-06 12:15:53 -0400 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2012-04-17 08:39:22 -0400 |
commit | fa168b92773d44cb97cff05a47c53ed899315120 (patch) | |
tree | ac2d47b381724eaa7e8326a3f50679c8104a0467 | |
parent | 0fa2a47e78d318673039f08b6dc77e6abcf7b8ad (diff) |
functions: use a pipe for umount_all instead of a PE
We don't care about the side effects of the subshell created by the
pipe since everything is localized within this function. Use the more
"canonical" syntax. This should stop the recurring bug reports that we
seem to get from people who think they understand Bash syntax, e.g.
FS#27203
FS#28331
FS#29145
FS#28582
FS#27098
FS#29496
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rw-r--r-- | functions | 41 |
1 files changed, 20 insertions, 21 deletions
@@ -549,32 +549,31 @@ mount_all() { umount_all() { # $1: restrict to fstype - local mounts + findmnt -mrunRo TARGET,FSTYPE,OPTIONS / | { + while read -r target fstype options; do + # match only targetted fstypes + if [[ $1 && $1 != "$fstype" ]]; then + continue + fi - while read -r target fstype options; do + # don't unmount API filesystems + if [[ $target = /@(proc|sys|run|dev|dev/pts) ]]; then + continue + fi - # match only targetted fstypes - if [[ $1 && $1 != "$fstype" ]]; then - continue - fi + # avoid networked devices + IFS=, read -ra opts <<< "$options" + if in_array _netdev "${opts[@]}"; then + continue + fi - # don't unmount API filesystems - if [[ $target = /@(proc|sys|run|dev|dev/pts) ]]; then - continue - fi + mounts=("$target" "${mounts[@]}") + done - # avoid networked devices - IFS=, read -ra opts <<< "$options" - if in_array _netdev "${opts[@]}"; then - continue + if (( ${#mounts[*]} )); then + umount -r "${mounts[@]}" fi - - mounts=("$target" "${mounts[@]}") - done < <(findmnt -mrunRo TARGET,FSTYPE,OPTIONS /) - - if (( ${#mounts[*]} )); then - umount -r "${mounts[@]}" - fi + } } |