如何在 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"