별칭 확장 가져오기(bash 및 zsh에서)

별칭 확장 가져오기(bash 및 zsh에서)

별칭의 확장자를 얻고 싶습니다.

예를 들어 다음과 같은 경우가 있습니다.

alias g=hub
alias cdh='cd $HOME'

나는 다음을 갖고 싶다:

expand_alias g==hub

expand_alias cdh==cd $HOME

까다로운 점은 두 쉘의 출력이 서로 다르다는 것입니다. bash:

$ alias g cdh
alias g='git'
alias cdh='cd $HOME'

지쉬어:

% alias g cdh
g=hub
cdh='cd $HOME'

alias주변에 접두사와 따옴표가 없다는 점에 유의하세요 hub.

답변1

당신 은 zsh사용할 수 있습니다

get_alias() {
  printf '%s\n' $aliases[$1]
}

를 사용하면 bash(POSIX 모드가 아니라고 가정하고 이 경우 alias와 유사한 출력이 제공됨 zsh) 다음을 수행할 수 있습니다.

get_alias() (
  eval '
    alias() { printf "%s\n" "${1#*=}"; }'"
    $(alias -- "$1")"
)

aliasalias기본적으로 첫 번째 인수의 첫 번째 오른쪽 내용을 인쇄하는 함수로 재정의한 후 출력을 평가합니다 .=

대부분의 POSIX 셸과 호환되도록 유사한 접근 방식을 사용할 수 있습니다 zsh.bash

get_alias() {
  eval "set -- $(alias -- "$1")"
  eval 'printf "%s\n" "${'"$#"'#*=}"'
}

답변2

기반으로Stefan Chazeras의 답변, 나는 다음을 생각해 냈습니다.

function alias_expand {
  if [[ $ZSH_VERSION ]]; then
    # shellcheck disable=2154  # aliases referenced but not assigned
    [ ${aliases[$1]+x} ] && printf '%s\n' "${aliases[$1]}" && return
  else  # bash
    [ "${BASH_ALIASES[$1]+x}" ] && printf '%s\n' "${BASH_ALIASES[$1]}" && return
  fi
  false  # Error: alias not defined
}

(bash 4.0 이상을 사용하세요).

답변3

쉘 함수를 정의하는 것은 어떻습니까?

EXA() { alias $@ | sed 's/^/expand_/; s/=/ == /; s/\o047//g; '; }

답변4

내 zsh 환경에서는 어떤 명령도 입력하지 않으면 모든 별칭 목록이 alias표시됩니다 . stdoutBash(MacOS)에서도 같은 일이 발생합니다. 이것들은 모두 형태이다alias=expansion

따라서 sed를 사용하여 추가로 필터링할 수 있습니다. alias | sed -ne 's/cdh=\(.*\)$/\1/p'"cdh"가 알고 싶은 별칭인 경우. 이것이 일반적인 작업인 경우 구성 파일에 이에 대한 셸 함수를 만들 수 있습니다.

expand_alias() { alias $@ | sed -ne 's/^'$@'=\(.*\)$/\1/p' }

관련 정보