Kri*_*ian 2 linux grep autocomplete
当我跑步时egrep,它显示warning: egrep is obsolescent; using grep -E
但我将它用作我经常使用的 shell 自动完成脚本的一部分,并且我不想重写它们。
我正在寻找抑制这些警告的方法,因为我的自动完成变得“丑陋”,例如:在输入时mycmd myargum<TAB>,我期望自动完成能够做到这一点mycmd myargument,但它却写道:
mycmd myargum<TAB>grep: warning: egrep is obsolescent; using grep -E
grep: warning: egrep is obsolescent; using grep -E
ent
Run Code Online (Sandbox Code Playgroud)
目前我尝试这样做:
mv /usr/bin/egrep /usr/bin/egrep.backup
echo 'grep -E $@' > /usr/bin/egrep
chmod a+x /usr/bin/egrep
Run Code Online (Sandbox Code Playgroud)
它的工作原理是将 grep 二进制文件更改为调用“grep -E”的脚本。
附加信息:
$ egrep.backup --version
egrep.backup: warning: egrep.backup is obsolescent; using grep -E
grep (GNU grep) 3.8
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others; see
<https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
Run Code Online (Sandbox Code Playgroud)
问题是:
在 GNU 中grep,egrep和fgrep无论如何都是 shell 脚本;从 3.8 开始,这些是产生过时警告的地方:
#!/bin/bash\ncmd=${0##*/}\necho "$cmd: warning: $cmd is obsolescent; using grep -E" >&2\nexec grep -E "$@"\nRun Code Online (Sandbox Code Playgroud)\n用你自己的版本替换它们就可以了;以前的版本是
\n#!/bin/sh\nexec grep -E "$@"\nRun Code Online (Sandbox Code Playgroud)\n(有一个明显的变体fgrep)。
唯一需要注意的方面是您的打包系统仍然 \xe2\x80\x9cowns\xe2\x80\x9degrep和fgrep二进制文件,因此每当软件包升级时,\xe2\x80\x99 将丢失您的更改。为了避免这种情况,您可以告诉打包系统它不再拥有这些文件;在 Debian 衍生版本中,运行
sudo dpkg-divert --divert /usr/bin/egrep.original --rename /usr/bin/egrep\nsudo dpkg-divert --divert /usr/bin/fgrep.original --rename /usr/bin/fgrep\nRun Code Online (Sandbox Code Playgroud)\n这将导致打包系统始终将打包文件重命名为?grep.original.
(好奇的读者可能想阅读导致这些警告的错误报告,以及因此提交的一些错误报告。)
\n| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |