aboutsummaryrefslogtreecommitdiffstats
path: root/bash-completion
diff options
context:
space:
mode:
Diffstat (limited to 'bash-completion')
-rw-r--r--bash-completion/umount20
1 files changed, 15 insertions, 5 deletions
diff --git a/bash-completion/umount b/bash-completion/umount
index 2988c42f39..7650358ddd 100644
--- a/bash-completion/umount
+++ b/bash-completion/umount
@@ -3,16 +3,26 @@ _umount_points_list()
# List of characters to escape shamelessly stolen from "scp" completion
local escape_chars='[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]'
- findmnt -lno TARGET | awk '{
- if ($0 ~ "^"ENVIRON["HOME"]) {
+ findmnt -lno TARGET | awk '
+
+ function literal_ere(s) {
+ gsub(/[][^$.*?+{}\\()|]/, "\\\\&", s)
+ return s
+ }
+
+ {
+ home_ere = literal_ere(ENVIRON["HOME"])
+ print home_ere
+ if ($0 ~ "^"home_ere) {
homeless = $0
- sub("^"ENVIRON["HOME"], "~", homeless)
+ sub("^"home_ere, "~", homeless)
gsub("'"$escape_chars"'", "\\\\&", homeless)
print homeless " "
}
- if ($0 ~ "^"ENVIRON["PWD"]) {
+ pwd_ere = literal_ere(ENVIRON["PWD"])
+ if ($0 ~ "^"pwd_ere) {
reldir = $0
- sub("^"ENVIRON["PWD"]"/?", "", reldir)
+ sub("^"pwd_ere"/?", "", reldir)
gsub("'"$escape_chars"'", "\\\\&", reldir)
print "./" reldir " "
print reldir " "