Hi! On Sat, Sep 03, 2022 at 07:43:26PM +0200, Andreas Henriksson wrote: > On Sun, May 22, 2022 at 12:20:27AM +0200, наб wrote: > > Package: mount > > Version: 2.36.1-8+deb11u1 > > Severity: normal > > > > Dear Maintainer, > > > > I just got this: > > nabijaczleweli@tarta:~/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1$ sudo umount > > 04.awk: cmd. line:8: (FILENAME=- FNR=1) fatal: invalid regexp: Invalid > > range end: /^/home/nabijaczleweli/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1/ > > dawk: cmd. line:8: (FILENAME=- FNR=1) fatal: invalid regexp: Invalid range > > end: /^/home/nabijaczleweli/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1/ > > I have a gut feeling this is because of the awk implementation in use on > your system. I think it would serve the bug report well if you could > include this information (I'm guessing mawk). > ie. `update-alternatives --query awk`
This had been the case in the past ‒ I even opened #956465 at one point ‒
where awk=mawk would either not work or explode for umount always,
which is why I switched back to awk=gawk:
-- >8 --
$ update-alternatives --query awk
Name: awk
Link: /usr/bin/awk
Slaves:
awk.1.gz /usr/share/man/man1/awk.1.gz
nawk /usr/bin/nawk
nawk.1.gz /usr/share/man/man1/nawk.1.gz
Status: auto
Best: /usr/bin/gawk
Value: /usr/bin/gawk
Alternative: /usr/bin/gawk
Priority: 10
Slaves:
awk.1.gz /usr/share/man/man1/gawk.1.gz
nawk /usr/bin/gawk
nawk.1.gz /usr/share/man/man1/gawk.1.gz
Alternative: /usr/bin/mawk
Priority: 5
Slaves:
awk.1.gz /usr/share/man/man1/mawk.1.gz
nawk /usr/bin/mawk
nawk.1.gz /usr/share/man/man1/mawk.1.gz
-- >8 --
With set -x, when <tab>bing, I get this (trimmed to show texture):
-- >8 --
+++ findmnt -lno TARGET
+++ awk '{
if ($0 ~ "^"ENVIRON["HOME"]) {
homeless = $0
sub("^"ENVIRON["HOME"], "~", homeless)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", homeless)
print homeless " "
}
if ($0 ~ "^"ENVIRON["PWD"]) {
reldir = $0
sub("^"ENVIRON["PWD"]"/?", "", reldir)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", reldir)
print "./" reldir " "
print reldir " "
}
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]", "\\\\&")
print $0 " "
}'
awk: cmd. line:8: (FILENAME=- FNR=1) fatal: invalid regexp: Invalid range end:
/^/home/nabijaczleweli/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1/
+ local opt
-- >8 --
If I cunningly override awk=mawk by setting `awk() { mawk "$@"; }`,
I get no explicit error:
-- >8 -:
+++ findmnt -lno TARGET
+++ awk '{
if ($0 ~ "^"ENVIRON["HOME"]) {
homeless = $0
sub("^"ENVIRON["HOME"], "~", homeless)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", homeless)
print homeless " "
}
if ($0 ~ "^"ENVIRON["PWD"]) {
reldir = $0
sub("^"ENVIRON["PWD"]"/?", "", reldir)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", reldir)
print "./" reldir " "
print reldir " "
}
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]", "\\\\&")
print $0 " "
}'
+++ mawk '{
if ($0 ~ "^"ENVIRON["HOME"]) {
homeless = $0
sub("^"ENVIRON["HOME"], "~", homeless)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", homeless)
print homeless " "
}
if ($0 ~ "^"ENVIRON["PWD"]) {
reldir = $0
sub("^"ENVIRON["PWD"]"/?", "", reldir)
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]",
"\\\\&", reldir)
print "./" reldir " "
print reldir " "
}
gsub("[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]", "\\\\&")
print $0 " "
}'
+ local opt
-- >8 --
but I also don't get any suggestions or completions.
So:
gawk explodes
mawk fails silently
Further analysis of line 8 shows that this is sufficient:
-- >8 --
~/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1$ echo "$PWD" | gawk '{print ($0 ~
"^"ENVIRON["PWD"])}'
gawk: cmd. line:1: (FILENAME=- FNR=1) fatal: invalid regexp: Invalid range end:
/^/home/nabijaczleweli/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1/
~/uwu/SunOS 2.0 (Tape) [Sun-2]/tape1$ echo "$PWD" | mawk '{print ($0 ~
"^"ENVIRON["PWD"])}'
0
-- >8 --
Which I gamed down to:
-- >8 --
$ echo | gawk '{print ($0 ~ "[n-2]")}'
gawk: cmd. line:1: (FILENAME=- FNR=1) fatal: invalid regexp: Invalid range end:
/[n-2]/
$ echo | mawk '{print ($0 ~ "[n-2]")}'
0
-- >8 --
So the solution seems to be "don't use paths as regexes lmao".
The correct spelling of that check would be
substr($0, 0, length(ENVIRON["PWD"])) == ENVIRON["PWD"]
and of the subsequent string manipulation as
reldir = substr($0, length(ENVIRON["PWD"]) + 1)
sub("^/", "", reldir)
for the second branch and
substr($0, 0, length(ENVIRON["HOME"])) == ENVIRON["HOME"]
with
homeless = "~" substr($0, length(ENVIRON["HOME"]) + 1)
for the first (checked on mawk and gawk).
Best,
наб
signature.asc
Description: PGP signature

