如何在 shell 中添加现有别名?
How to prepend existing alias in shell?
我有来自 oh-my-zsh 套件的 ls 的现有别名。
igor@shogun ~ % alias ls
ls='ls -G'
igor@shogun ~ %
此别名取决于 OS、颜色设置等各种设置。因此我不能只是覆盖并希望将现有别名添加到这样的东西之前:
LC_COLLATE=C ls -G
但这并没有像预期的那样工作,“-G”不见了:
igor@shogun ~ % alias ls='LC_COLLATE ls'
igor@shogun ~ % alias ls
ls='LC_COLLATE ls'
igor@shogun ~ %
我能做到:
igor@shogun ~ % alias ls
ls='ls -G'
igor@shogun ~ % alias ls="LC_COLLATE=C `alias ls|sed -E "s/ls='(.*)'//"`"
igor@shogun ~ % alias ls
ls='LC_COLLATE=C ls -G'
igor@shogun ~ %
丑! :)
任何优雅的解决方案?
不依赖外部程序,如 sed。
eval old$(alias ls);alias ls="LC_COLLATE=C $oldls"
我有来自 oh-my-zsh 套件的 ls 的现有别名。
igor@shogun ~ % alias ls
ls='ls -G'
igor@shogun ~ %
此别名取决于 OS、颜色设置等各种设置。因此我不能只是覆盖并希望将现有别名添加到这样的东西之前:
LC_COLLATE=C ls -G
但这并没有像预期的那样工作,“-G”不见了:
igor@shogun ~ % alias ls='LC_COLLATE ls'
igor@shogun ~ % alias ls
ls='LC_COLLATE ls'
igor@shogun ~ %
我能做到:
igor@shogun ~ % alias ls
ls='ls -G'
igor@shogun ~ % alias ls="LC_COLLATE=C `alias ls|sed -E "s/ls='(.*)'//"`"
igor@shogun ~ % alias ls
ls='LC_COLLATE=C ls -G'
igor@shogun ~ %
丑! :)
任何优雅的解决方案?
不依赖外部程序,如 sed。
eval old$(alias ls);alias ls="LC_COLLATE=C $oldls"