여기에는 이러한 별칭이 있습니다.~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
하지만 실행할 때 아무 효과가 없으며 find ... -exec grep ...
항상 이러한 옵션을 수동으로 제공해야 합니다.
find
옵션 매개변수에 종속성 별칭을 알릴 수 있는 방법이 있나요 ? -exec
다른 별칭이 아닌 구성 파일을 생각하고 있습니다.
어떤 면에서는 안전하지 않을까요?
답변1
이러한 별칭은 사용할 수 없습니다. 별칭은 긴 명령 시퀀스에서 먼저 사용되는 경우에만 작동하며, 쉘은 기본적으로 별칭 텍스트를 실제 명령으로 대체합니다. 명령을 입력하면 쉘은 먼저 별칭을 검색한 다음 함수 등을 검색합니다. 명령 시퀀스 중간에 별칭을 사용하면 명령 대체/별칭 대체가 작동하지 않습니다.
또한 , 플래그 -exec
는 find
항상 바이너리를 실행하는 별도의 프로세스를 생성하며 별칭이나 하드코딩된 함수가 아닙니다.
답변2
일부 쉘에서는 명령줄 어디에서나 별칭을 확장할 수 있습니다. 예를 zsh
들어전역 별칭,alias -g 'grep=grep --color=auto -H'
그러나 대화형 셸이 bash인 경우 별칭은 명령의 첫 번째 단어로 나타날 때만 확장되므로 호출을 grep
셸로 래핑하고 파일을 읽을 수 있는 방식으로 셸을 호출해야 합니다. ~/.bashrc
, 대화형 셸 세션과 같습니다.
예를 들어
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
AFAIK 어떤 식으로든 안전하지 않지만 약간의 오버헤드가 있으며 필요한 옵션을 grep에 직접 공급하는 것보다 더 편리하지 않습니다.