4 ms·
On their own it's probably trivial. I suspect over time it becomes a large tasks/maintenance question. Depending on the number of additional commands on simila
by Forge36 4y ago
On their own it's probably trivial. I suspect over time it becomes a large tasks/maintenance question.
Depending on the number of additional commands on similar removal paths it may have performance/memory improvement implications for minimum supported specs.
- Spivak 4y agoDoes it though? I mean we’re really talking about a teeny tiny little startup code to read arg0 and use it to do the equivalent of passing -E or -P.
- LukeShu 4y agoEven simpler than that! GNU grep hasn't done arg0-inspection since 2002; since then `fgrep` and `egrep` have been short[1] shell scripts. [1]: 11 lines at the longest, 2 lines at the shortest; currently 4 lines https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh?h=v3.8 https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh...
- DaSHacka 4y agoI don't think that's why, on my Arch Linux box they're just shell scripts that pass the -E/-F argument to regular Grep. $ cat /usr/bin/egrep #!/bin/sh exec grep -E "$@" $ cat /usr/bin/fgrep #!/bin/sh exec grep -F "$@"
- somat 4y agointeresting, on openbsd they are the same inode and it uses it uses arg0 to figure out what to do. ls -li /usr/bin/grep /usr/bin/egrep /usr/bin/fgrep 285407 -r-xr-xr-x 6 root bin 31896 Aug 14 15:23 /usr/bin/egrep 285407 -r-xr-xr-x 6 root bin 31896 Aug 14 15:23 /usr/bin/fgrep 285407 -r-xr-xr-x 6 root bin 31896 Aug 14 15:23 /usr/bin/grep
- LukeShu 4y agoGNU has flip-flopped on it. - Based on the NEWS file, it sounds like pre-v2.0 (1993) versions had totally separate implementations for each program and didn't have -E, -F, or -G flags (but only history back to 1998 has been imported to Git, and I don't feel like digging up old tarballs to verify) - In the first revision checked in to Git (1998), it's argv[0]-inspecting, but the program is compiled identically 3 times, rather than being hardlinked or symlinked. https://git.savannah.gnu.org/cgit/grep.git/commit/?id=06b9f7e683e7650804cadd9a4c5cf6bff6c89625 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=06b9f7... - In v2.2c (1998) it changed to be 3 separate binaries https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f7620959fee786f7b8edde63bd61d6a3e56daec4 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f76209... - In v2.5 (2002) it changed to be argv[0]-inspecting hardlinks https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f620c907368af50cc920699897bd88878591d011 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f620c9... - In v2.5.1 (2002) it changed to be shell scripts https://git.savannah.gnu.org/cgit/grep.git/commit/?id=5cb71b0d603501ec10bcc3df3261bd8a760cda84 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=5cb71b... <---- (this is a spicy commit message) - In v2.5.2 (2005) it changed to be 3 separate binaries (the `fgrep` binary being a lot smaller than the `grep` binary) https://git.savannah.gnu.org/cgit/grep.git/commit/?id=d25bebd35aae9c5ed0e1d62eb211ff16586e759f https://git.savannah.gnu.org/cgit/grep.git/commit/?id=d25beb... - In v2.19 (2014) it changed back to shell scripts https://git.savannah.gnu.org/cgit/grep.git/commit/?id=b639643840ef506594b6c46e5b24d9980a33e78e https://git.savannah.gnu.org/cgit/grep.git/commit/?id=b63964...
- lolc 4y agoThanks for the lineup! Seems quite the waste that this would change every five years. So removing seems a good option. I didn't like the arg0 magic, so I'm happy that is gone. Funny to think I had to be in the right time window to even notice that.
- chasil 4y agoWhat is your objection to argv[0]? Gzip and its successors have used this technique for decades, and busybox wouldn't exist without it. On Android, take a look at /system/bin, to find this approach still very much used.
- augusto-moura 4y agoThose are not provided by GNU grep, they are an Arch thing (could exist on other distros as well, I'm not sure). The scripts are hand-written for keeping the support with older scripts. I imagine Arch is not using GNU's egrep and fgrep anymore because of the deprecation. This also answer the question on why is not necessary to GNU to maintain those different commands. Distros can easily shim them to grep if they want to, similar to how a lot of them already link /bin/sh to bash
- LukeShu 4y ago> Those are not provided by GNU grep, they are an Arch thing No, they're a GNU grep thing. GNU grep 3.7: https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh?h=v3.7 https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh... GNU grep 3.8 (with the warning): https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh?h=v3.8 https://git.savannah.gnu.org/cgit/grep.git/tree/src/egrep.sh... And you can see that the Arch package isn't doing anything special to add it: https://github.com/archlinux/svntogit-packages/blob/packages/grep/trunk/PKGBUILD https://github.com/archlinux/svntogit-packages/blob/packages... In general, Arch avoids doing Arch-specific things and prefers to provide vanilla upstream packages, a lot more than other distros avoid doing distro-specific things.