내가 실행하면 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
GNU grep
및 egrep
는 fgrep
어쨌든 쉘 스크립트입니다. 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
패키지가 업그레이드될 때마다 변경 사항이 손실된다는 것입니다. 이를 방지하려면 데비안 파생물에서 더 이상 이러한 파일을 소유하지 않는다고 패키징 시스템에 알릴 수 있습니다.
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
.
(궁금한 독자들은 원할 수도 있습니다.이러한 경고를 발생시킨 버그 보고서를 읽어보세요., 그리고일부 버그 보고서제출하다그러므로.)