LoginSignup
0
2

More than 5 years have passed since last update.

【Zsh】aliasのaliasが書きたい

Posted at

動機

定番のalias。

case "$OSTYPE" in
  freebsd*|darwin*)
    alias ls='ls -F -G -w';;
  linux*)
    alias ls='ls -F --color=auto';;
esac

共通しているオプションがあるので、下のように書きたい。

alias ls='ls -F'

case "$OSTYPE" in
  freebsd*|darwin*)
    alias ls='ls -G -w';;
  linux*)
    alias ls='ls --color=auto';;
esac

しかしこれでは単にaliasを上書きしているだけなので、最初のaliasは跡形もなく消えます。

$ alias ls='ls -F'
$ alias ls='ls --color=auto'
$ alias ls
ls='ls --color=auto'

案1. 変数を使う

ls=ls
ls="$ls -F"
ls="$ls --color=auto"
alias ls="$ls"
unset ls

愚直です。何をしているかは分かりやすいです。

案2. evalを使う

alias ls=ls
eval alias $(alias ls)"' -F'"
eval alias $(alias ls)"' --color'"

ちょっと黒魔術的です。

関数化

_alias() { echo alias $(alias $1 || echo "'$1=$1'")"'${2:gs/\'/"'\\''"/}'"; }

eval $(_alias ls ' -F')
eval $(_alias ls ' --color')

aliasが存在しない場合の処理やらなんやら追加したら長くなったので関数化しました。
黒魔術度が増しました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2