별칭 grep 참조 사용법

별칭 grep 참조 사용법

파일에 별칭을 만들려고 하는데 bashrc문제가 발생했습니다. grep우리 서버의 특정 IP 주소에 액세스하는 명령에 대한 액세스 로그를 원합니다 . 내 현재 항목은 다음과 같습니다

alias ip_usage='sudo grep "$1" /srv/logs/httpd/chris-server.com/access.log'

내 쉘 사용법은 다음과 같습니다

ip_usage 192.168.0.0

하지만 이렇게 하면 액세스 로그의 모든 기록이 다시 표시됩니다.

참조 사용법을 반대로 시도했지만 성능은 동일합니다.

alias ip_usage="sudo grep '$1' /srv/logs/httpd/chris-server.com/access.log"

달리기:

sudo grep '192.168.0.0' /srv/logs/httpd/chris-server.com/access.log

내가 원하는 레코드를 다시 가져오므로 내 인용문과 전달된 값이 포함됩니다.

답변1

인용된 첫 번째 버전이 정확합니다.와는 별개로별칭은 원하는 것을 할 수 없습니다. 다음과 같은 기능이 필요합니다.

ip_usage() { sudo grep "$1" /srv/logs/httpd/chris-server.com/access.log; }

문서

에서 man bash:

별칭을 사용하면 간단한 명령의 첫 번째 단어로 사용될 때 단어를 문자열로 바꿀 수 있습니다.

즉, 별칭은 문자열 교체를 수행합니다. 매개변수 조작을 지원하지 않습니다. 따라서 $1별칭을 통해 첫 번째 매개변수를 참조하는 것은 지원되지 않습니다.

또한 다음에서 man bash:

쉘 함수(위의 SHELL GRAMMAR에 설명된 대로 정의됨)는 나중에 실행하기 위해 일련의 명령을 저장합니다. 쉘 함수의 이름을 단순 명령 이름으로 사용하는 경우에는 해당 함수 이름과 연관된 명령 목록이 실행됩니다. 함수는 현재 셸의 컨텍스트에서 실행됩니다. 함수를 해석하기 위한 새 프로세스가 생성되지 않습니다(셸 스크립트 실행과 대조). 함수가 실행되면 함수의 매개변수는 실행 중에 위치 매개변수가 됩니다. 변경 사항을 반영하도록 특수 매개변수 #를 업데이트합니다. 특수 매개변수 0은 변경되지 않습니다. 함수가 실행되면 FUNCNAME 변수의 첫 번째 요소가 함수 이름으로 설정됩니다.

즉, bash 함수는 위치 인수를 지원합니다.

내레이터: 끝에 $1이 있는 별칭이 작동하는 것처럼 보이는 이유는 무엇입니까?

별칭을 정의해보자

$ alias e='echo $1'

이제 셸의 위치 매개변수를 지우고 별칭을 실행해 보겠습니다.

$ set -- 
$ e a b c
a b c

그것은 우리가 바라던 대로 정확하게 이루어졌습니다.

하지만 주의할 점은 함정이 있다는 것입니다. 쉘의 첫 번째 위치 인수를 설정해 보겠습니다.

$ set -- First
$ echo "$1"
First

이제 명령을 다시 실행해 보겠습니다.

$ e a b c
First a b c

$1여기서 별칭은 별칭의 첫 번째 매개변수가 아닌 첫 번째 셸의 첫 번째 매개변수를 참조하는 것이 분명합니다 .

관련 정보