Bash에 전역 별칭이 있습니까?

Bash에 전역 별칭이 있습니까?

zsh처럼 bash에서 "전역" 별칭을 설정할 수 있는지 궁금합니다.-G별칭 옵션 - 사용자 관점에서 "전역"이 아니라 쉘 관점에서.

내가 알고 싶은 것은 별칭(또는 다른 것?)을 bash의 어느 곳에서나 교체할 수 있다는 것입니다.

예를 들어. :

alias ...='../..'

답변1

Bash 별칭에는 이 기능이 없지만 다음과 같이 작성할 수 있습니다.

alias cd='cd '
alias ...='../..'
cd ... # teleport to ../..

설명하다:

배쉬 참조 매뉴얼설명하다:

별칭 값의 마지막 문자가 비어 있으면 별칭 뒤의 다음 명령 단어에서도 별칭 확장이 확인됩니다.

가능한 해결책은 Readline매크로입니다. 당신은 쓸 수 있습니다:

set -o emacs
bind '"\C-x...":"cd ../.."'

echo, Control+ x,를 입력하세요 ....

넌 봐야 해echo cd ../..

바라보다

답변2

bash(1)매뉴얼 페이지 에서 :

ALIASES 
  Aliases allow a string to be substituted for a word when it is used  as
  the  first  word  of  a  simple command. [...]

따라서 bash별칭에는 이 능력이 없고 bash사소한 능력도 없습니다 pre-exec(그러나이봐그러나 해커의 경우).

로서부분의해결 방법을 사용할 수도 있습니다.마치다최소한의 시작점인 함수:

function _comp_cd() {
    local cur=${COMP_WORDS[COMP_CWORD]} # the current token
    [[ $cur =~ \.\.\. ]] && {
        cur=${cur/.../..\/..}
        COMPREPLY=( $cur )
        return
    }
    COMPREPLY=()    # let default kick in
}

complete -o bashdefault -o default -F _comp_cd cd

이제 명령에서 Tab 키를 눌렀을 때 cd커서 아래의 단어에 "..."가 포함되어 있으면 각 단어가 "../.."로 대체됩니다. 그러나 완료에는 작은 문제가 있습니다(복잡도를 계산하지 않음). 이는 아마도 위에서 짐작할 수 있듯이 명령별로 지정해야 한다는 것입니다.

이것배쉬 완성 패키지완료 함수를 즉석에서 로드하여 이를 처리하려면 기본 완료 핸들러를 사용하세요. 모험을 즐기고 싶다면 _filedir()대체 "..."와 같은 내용을 포함하도록 일반 파일/디렉토리 확장을 위한 내부 기능을 수정할 수 있어야 합니다.

(이 모든 것은 "..."을 작동시키는 NetWare 셸을 연상시킵니다.)

답변3

bash 별칭은 줄의 첫 번째 단어를 기반으로만 작동하며 zsh처럼 전역적 의미로 정의할 수 없습니다.

내가 생각할 수 있는 유일한 방법은 다음과 같은 변수를 정의하는 것입니다.

export PP=../..  # $PP meaning parent of parent
cd $PP/anotherDirectory

하지만 솔직히 말해서 이 경우에는 그냥 ../..라고 입력하는 편이 낫습니다. 간단히 말해서 bash는 그것을하지 않습니다.

관련 정보