별칭의 확장자를 얻고 싶습니다.
예를 들어 다음과 같은 경우가 있습니다.
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")"
)
alias
alias
기본적으로 첫 번째 인수의 첫 번째 오른쪽 내용을 인쇄하는 함수로 재정의한 후 출력을 평가합니다 .=
대부분의 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
표시됩니다 . stdout
Bash(MacOS)에서도 같은 일이 발생합니다. 이것들은 모두 형태이다alias=expansion
따라서 sed를 사용하여 추가로 필터링할 수 있습니다. alias | sed -ne 's/cdh=\(.*\)$/\1/p'
"cdh"가 알고 싶은 별칭인 경우. 이것이 일반적인 작업인 경우 구성 파일에 이에 대한 셸 함수를 만들 수 있습니다.
expand_alias() { alias $@ | sed -ne 's/^'$@'=\(.*\)$/\1/p' }