警告の抑制:egrepは廃止されました。 grep -Eを使用してください。

警告の抑制:egrepは廃止されました。 grep -Eを使用してください。

実行するとegrep表示されます。warning: egrep is obsolescent; using grep -E

しかし、私はよく使うシェルオートコンプリートスクリプトの一部としてそれを使用して書き直したくありません。

オートコンプリート機能が「不快」になるため、これらの警告を表示しない方法を探しています。たとえば、と入力すると、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

現在私はこれをしようとしています:

mv /usr/bin/egrep /usr/bin/egrep.backup
echo 'grep -E $@' > /usr/bin/egrep
chmod a+x /usr/bin/egrep

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>.

問題は次のとおりです。

  • この方法は可能ですか?意図しない結果がありますか?
    • grepパッケージを削除/削除する場合、egrep.backupバイナリはまだ削除されていないままになる可能性がありますが、そうする予定はなかったため問題ありません。
  • この警告メッセージを表示しないより良い方法はありますか?

ベストアンサー1

GNUgrepegrepfgrepとにかくシェルスクリプトです。 3.8 以降、以下は廃止予定の警告が生成される場所です。

#!/bin/bash
cmd=${0##*/}
echo "$cmd: warning: $cmd is obsolescent; using grep -E" >&2
exec grep -E "$@"

以前のバージョンである独自のバージョンと交換してください。

#!/bin/sh
exec grep -E "$@"

(明らかなバリエーションがありますfgrep)。

知っておくべき唯一の側面は、パッケージングシステムがまだバイナリをegrep「所有」しているため、パッケージがアップグレードされるfgrepたびに変更が失われることです。これを防ぐには、Debian 派生がこれらのファイルを所有していないことをパッケージングシステムに通知することができます。

sudo dpkg-divert --divert /usr/bin/egrep.original --rename /usr/bin/egrep
sudo dpkg-divert --divert /usr/bin/fgrep.original --rename /usr/bin/fgrep

これにより、パッケージングシステムは常にパッケージングファイル名を?grep.original

(気になる読者は欲しいかもしれません。これらの警告を引き起こしたバグレポートをお読みください。いくつかのバグレポート提出するだから.)

おすすめ記事