bash에서 별칭을 만들려고합니다. 내가 뭘 원하는지도입니다 ls -la
에ls -la | more
내 .bashrc 파일에서 이것은 내가 시도한 것입니다.
alias 'ls -la'='ls -la | more'
그러나 별칭 이름에 공백이 있기 때문에 작동하지 않습니다. 이에 대한 해결 방법이 있습니까?
bash에서 별칭을 만들려고합니다. 내가 뭘 원하는지도입니다 ls -la
에ls -la | more
내 .bashrc 파일에서 이것은 내가 시도한 것입니다.
alias 'ls -la'='ls -la | more'
그러나 별칭 이름에 공백이 있기 때문에 작동하지 않습니다. 이에 대한 해결 방법이 있습니까?
답변:
배쉬 문서 상태 "거의 모든 목적은, 쉘 기능 별칭 선호하고 있습니다." 다음은 인수가 (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
command
함수가 재귀 적으로 호출되는 것을 방지합니다.
로부터 별명 man 페이지 :
인용되지 않은 경우 각 간단한 명령의 첫 단어는 별명이 있는지 확인합니다. 그렇다면 해당 단어가 별칭의 텍스트로 바뀝니다. 별명과 대체 텍스트는 별명에`= '를 포함 할 수없는 것을 제외하고 쉘 메타 문자를 포함한 유효한 쉘 입력을 포함 할 수 있습니다.
따라서 첫 번째 단어 만 별칭 일치를 검사하여 여러 단어 별칭을 사용할 수 없습니다. 인수를 확인하고 일치하는 경우 명령을 호출하고 정상을 호출하는 쉘 스크립트를 작성할 수 있습니다 ls
( @Dennis Williamson의 답변 참조 )
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
ls -lat
이 치료에서 제외 되기를 원한다면 어떻게 처리합니까? -la*
항목 위에 처리하기 위해 케이스를 넣어야합니다 .
alias lsm='ls -la | more'