배쉬 : 별명에 공백


116

bash에서 별칭을 만들려고합니다. 내가 뭘 원하는지도입니다 ls -lals -la | more

내 .bashrc 파일에서 이것은 내가 시도한 것입니다.

alias 'ls -la'='ls -la | more'

그러나 별칭 이름에 공백이 있기 때문에 작동하지 않습니다. 이에 대한 해결 방법이 있습니까?


8
왜 안합니까alias lsm='ls -la | more'
Nifle

답변:


125

배쉬 문서 상태 "거의 모든 목적은, 쉘 기능 별칭 선호하고 있습니다." 다음은 인수가 (only)로 구성된 경우 ls출력을 바꾸고 파이프 하는 쉘 함수입니다 .more-la

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

원 라이너로 :

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

자동 파이프 출력 :

ls -la

1
if 문 안에 이중 괄호를 사용해야하는 이유는 무엇입니까?
sixtyfootersdude

1
@ sixtyfootersdude : 이중 대괄호 형식이 더 강력하고 습관적으로 사용합니다. 참조 mywiki.wooledge.org/BashFAQ/031
데니스 윌리엄슨

마지막 명령은 무엇입니까? 별칭 ls = 'ls ()'??
Jeef

1
@Jeef : 아니요, 내 대답은 별칭 대신 함수 사용합니다 . 더 명확하게하기 위해 편집했습니다.
Dennis Williamson

6
@merlinpatt : command함수가 재귀 적으로 호출되는 것을 방지합니다.
Dennis Williamson

53

로부터 별명 man 페이지 :

인용되지 않은 경우 각 간단한 명령의 첫 단어는 별명이 있는지 확인합니다. 그렇다면 해당 단어가 별칭의 텍스트로 바뀝니다. 별명과 대체 텍스트는 별명에`= '를 포함 할 수없는 것을 제외하고 쉘 메타 문자를 포함한 유효한 쉘 입력을 포함 할 수 있습니다.

따라서 첫 번째 단어 만 별칭 일치를 검사하여 여러 단어 별칭을 사용할 수 없습니다. 인수를 확인하고 일치하는 경우 명령을 호출하고 정상을 호출하는 쉘 스크립트를 작성할 수 있습니다 ls( @Dennis Williamson의 답변 참조 )


8
+1 ls -la를 별명으로 사용할 수없는 이유를 설명합니다.
sixtyfootersdude

7
문제를 해결하는 대신 질문에 답변했기 때문에 도움이되었습니다. 여기에 공백이있는 별칭을 만들고 싶었 기 때문에 여기에 왔습니다.
angryundead

이것은 내 질문에 대답했을뿐만 아니라 앨리어싱 메커니즘이 실제로 어떻게 작동하는지에 대한 귀중한 통찰력을 제공했습니다. 매뉴얼 페이지에서 인용 한 내용이 매우 도움이되었습니다.
릴리 핀리

14

Dennis의 답변에서 가져온 약간 개선 된 접근법 :

function ls() {
  case $* in
    -la* ) shift 1; command ls -la "$@" | more ;;
    * ) command ls "$@" ;;
  esac
}

또는 하나의 라이너 :

function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }

이를 통해 필요한 경우 명령 뒤에 추가 옵션 / 인수가 추가 될 수 있습니다. ls -la -h


2
ls -lat이 치료에서 제외 되기를 원한다면 어떻게 처리합니까? -la*항목 위에 처리하기 위해 케이스를 넣어야합니다 .
Steven Lu

-1

이 별명을 여전히 호출 할 수 있지만 공백이 명령 단어의 일부가되도록 인용이 필요합니다. 따라서 옵션이 아닌로 "ls -la" -p pattern전달됩니다 .-p patternmorels

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.