저는 FreeBSD 9.1-RELEASE를 실행하고 있습니다. GNU grep과 portmaster textproc/gnugrep
.
그러나 사용자의 "기본" grep은 여전히 FreeBSD grep입니다.
# /usr/local/bin/grep -V
/usr/local/bin/grep (GNU grep) 2.12
# grep -V
grep (GNU grep) 2.5.1-FreeBSD
GNU grep을 기본값으로 만들고 싶습니다. 내 환경 변수 PATH
에 지정된 디렉터리 순서에 문제가 있다는 것을 알고 있습니다.
# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
하지만 /usr/local/bin
항목을 내 PATH
.
Debian과 같은 Linux 배포판에서 이러한 작업은 일반적 dpkg-divert
으로 및/또는 를 사용하여 수행 됩니다 update-alternatives
.
시스템 업그레이드 등을 중단하지 않고 FreeBSD에서 원하는 작업을 수행하는 가장 좋은 방법은 무엇입니까?
답변1
고쳐 쓰다:이 답변은 2013년의 답변이며 FreeBSD 8.x 및 이전 버전에 적용됩니다. ㅏBSD grep에 추가되다개정 222273FreeBSD-9.0에 나타납니다(이상하게도 일반적으로 포괄적인 릴리스 노트에는 변경 사항이 누락되어 있습니다:구글 검색). 모든 기능을 갖춘 GNU grep은 여전히 유효합니다.포트 컬렉션에서 찾을 수 있습니다..
FreeBSDgrep
예 예전에는GNU grep
, 매우 오래되었고 일부 패치가 적용되었지만:
# which grep
/usr/bin/grep
# /usr/bin/grep -V
grep (GNU grep) 2.5.1-FreeBSD
Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
여기에는 몇 가지 패치(주로 Fedora Linux에서 제공)가 있습니다. 이미 /usr/src/
해당 패치가 설치되어 있는 경우 를 참조하세요 /usr/src/gnu/usr.bin/grep/FREEBSD-upgrade
.
포트 버전(2.12 대 2.5.1)에서 특정 항목이 필요한 경우 많은 버그 수정, 속도 개선 및 PCRE 지원(시스템 버전에서는 활성화되지 않음)이 있으므로 다시 -P
주문하는 것이 매우 안전합니다 PATH
. /usr/local/bin
나는 보통 무엇을 한다. (FreeBSD에서는 기본값이 명시 적이 지만 가장 좋은 방법은 su -
루트 환경을 올바르게 설정하는 것 입니다 .)~root/.cshrc
PATH
그렇지 않으면 쉘 매뉴얼 페이지를 확인하고 필요한 경우 설정하십시오 alias
. 그러나 이것은 실제로 대화식 사용에만 해당되며 쉘 스크립트나 Makefile에서는 관찰되지 않습니다.
답변2
별칭을 만들고 bash에 추가하세요 ~/.bash_profile
.
alias grep /usr/local/bin/grep
(다른 쉘도 비슷한 일을 할 수 있다고 확신합니다.) 이렇게 하면 개별 실행 파일을 선택할 수 있습니다. gnugrep
시스템 별칭을 잃지 않으려면 별칭을 호출할 수도 있습니다.
답변3
경로의 시작 부분까지만 grep하십시오.
- 디렉토리를 생성합니다
mkdir /override/bin
. - 이 디렉토리에 심볼릭 링크를 넣거나
ln -s /usr/local/bin/grep /override/bin/
gnu ln이 있는 경우 더 좋습니다ln -s -t /override/bin/ /usr/local/bin/grep
(잘못된 추적 감소). /override/bin/
경로의 시작 부분에 추가합니다 .
답변4
${PATH}를 변경하지 않으려면 grep
앞서 입력한 ${PATH} 값에서 원하는 경로로 연결할 수도 있습니다.
예를 들어 /bin
${PATH}의 두 번째 항목은 모든 사용자의 ${PATH} 값에 있을 수 있습니다.
따라서 루트로 다음을 수행할 수 있습니다.
cd /bin
ln -s /usr/local/bin/grep