
エイリアスの拡張子を取得したい。
たとえば、次のような場合があります。
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' }