csh의 별칭 루프

csh의 별칭 루프

여기에서 별칭 순환 오류가 발생하는 이유는 무엇입니까?

alias df 'printf "\n"; df -hP | column -t'

하지만 여기서는 그렇지 않습니다.

alias df 'df -hP | column -t'

별칭에 다른 이름을 지정하고 계속 작동할 수 있다는 것을 알고 있지만 기본 작업을 이해하려고 노력하고 있습니다.

답변1

이것은 tcsh 매뉴얼 페이지에 설명되어 있습니다(당신은 csh가 아닌 tcsh를 사용하고 있는 것 같습니다). 인용된 세 번째 단락을 참조하십시오.

쉘은 쉘에 의해 설정, 설정 해제 및 인쇄될 수 있는 별칭 목록을 유지 관리합니다.별명그리고별명주문하다. 명령줄을 간단한 명령으로 구문 분석한 후(참조주문하다)은 각 명령의 첫 번째 단어(왼쪽에서 오른쪽으로)에 별칭이 있는지 확인합니다. 그렇다면 첫 번째 단어를 별칭으로 바꾸세요. 별칭에 기록 참조가 포함된 경우 계속 진행하세요.기록 교체(qv) 원래 명령이 이전 입력 라인인 것처럼. 별칭에 기록 참조가 없으면 매개변수 목록은 변경되지 않고 그대로 유지됩니다.

따라서 "ls"의 별칭이 "ls -l"인 경우 "ls /usr" 명령은 "ls -l /usr"이 되어 매개변수 목록이 방해받지 않습니다. "lookup"의 별칭이 "grep !^ /etc/passwd"인 경우 "lookup bill"은 "grep bill /etc/passwd"가 됩니다. 별칭을 사용하여 파서 메타그램을 도입할 수 있습니다. 예를 들어 `alias print 'pr !* | lpr'은 pr(1)의 인수를 라인 프린터에 전달하는 "명령"("print")을 정의합니다.

명령의 첫 번째 단어에 별칭이 없을 때까지 별칭 대체를 반복합니다. 별칭 대체가 첫 번째 단어를 변경하지 않으면(이전 예에서와 같이) 루프를 방지하도록 표시됩니다. 추가 루프가 감지되어 오류가 발생했습니다.

좋은 해결 방법은 \명령 앞에 문자를 추가하여 별칭 확장을 비활성화하는 것입니다.

alias df 'printf "\n"; \df -hP | column -t'

답변2

별칭도 첫 번째 명령인 경우 별칭으로 해석되지 않고 그렇지 않은 경우 별칭으로 해석되는 것 같습니다. 이 문제는 절대 경로로 해결할 수 있습니다.

alias df 'printf "\n"; /bin/df -hP | column -t'

또는 Keith가 의견과 답변에서 지적했듯이 \별칭 확장을 방지할 수 있습니다.

alias df 'printf "\n"; \df -hP | column -t'

관련 정보