유효한 emacs 별칭 함수를 만드는 방법은 무엇입니까?

유효한 emacs 별칭 함수를 만드는 방법은 무엇입니까?

tmux의 성가신 문제를 해결하기 위해 .bashrc 파일에 다음 코드를 추가했습니다.

alias emcs="command emacs"

# Fix emacs in tmux
emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm emacs "$@"
    else
        emacs "$@"
    fi
    return;
}

별칭은 원래 emacs 명령에 더 쉽게 액세스하기 위한 것입니다.

이 함수는 나중에 나열된 인수로 대체되어야 합니다 emacs . . ..TERM-xterm emacs . . .

내 문제는 그것을 실행할 때 emacs명령줄에서 멈추는 것입니다. 기능을 "emaacs" 또는 "emacs" 이외의 것으로 변경하면 완벽하게 작동합니다. 명령의 실제 이름을 사용할 때 작동이 멈추는 이유는 무엇이며 작동하게 하려면 어떻게 해야 합니까?


(내가 왜 이렇게 했는지 궁금하다면 tmux가 터미널을 화면으로 변경하기 때문인데, 어떤 이유로 주석과 변수 이름이 같은 색상인 emacs 색상을 변경하기 때문입니다.)

답변1

귀하의 기능을 살펴보십시오. 이 예에서는 유죄를 기소하기 위해 일부 이름을 변경하고 귀하의 질문과 관련 없는 일부 이름을 제거했습니다.

recurse{} (
    recurse "$@"
}

호출되면 어떻게 될 것이라고 생각하시나요?

이 문제를 해결하려면 명시적 바이너리를 호출하면 됩니다.

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm /usr/bin/emacs "$@"
    else
        /usr/bin/emacs "$@"
    fi
    return;
}

또는 경로가 올바르게 설정되어 있다고 믿을 수 있습니다.

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
    return;
}

답변2

alias emacs='TERM=xterm emacs'

나는 이것이 당신에게 필요한 것이라고 믿습니다. 무조건 으로 설정 TERM되어 xterm실행됩니다 emacs.

이 작업을 다음에서만 수행하려는 경우 tmux:

emacs () {
    if [ -n "$TMUX" ]; then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
}

이는 command다음 용도로 사용됩니다.아니요이 함수를 재귀적으로 호출하세요. 별칭에는 필요하지 않습니다. return이 기능에서도 필요하지 않습니다.

관련 정보