我在 WSL 中使用 Void Linux 和fish
shell。我想定义别名,但我不知道为什么它们没有被执行。当我使用时,zsh
一切似乎都正常。
我希望无论使用什么 shell 都可以定义别名。
我曾尝试将它们放入etc/rc.local
和etc/profile
里面/etc/profile.d/
。
难道我做错了什么?
答案1
答案2
首先我想说的是,这个解决方案可能是严重过度杀伤1对于当前的问题,nix
但是home-manager
2允许您在文件中创建与 shell 无关的别名~/.config/home-manager/home.nix
。例如,我已定义(简化):
{
home.shellAliases = {
ls = "exa --header --icons --classify";
ll = "exa -l --header --icons --classify";
la = "exa -a --header --icons --classify";
};
# Have home-manager create and manage the config files for these shells:
programs.bash.enable = true;
programs.fish.enable = true;
}
Zsh(及更多)也受支持。
正如在帮助:
此选项仅用于管理与所有 shell 兼容的简单别名。如果您需要使用 shell 特定功能,请确保使用 shell 特定选项,例如
programs.bash.shellAliases
Bash。
1有点矫枉过正,因为 Nix 本质上是在现有发行版(在本例中为 Void)之上覆盖了一个完全独立的发行版。话虽如此,Nix 还是有很多好处的,所以我将它与 WSL 一起使用,这样我在 WSL 中运行的每个发行版都按照我喜欢的方式预先配置了我的所有客户端应用程序。
在 Nix 之前,我使用 Ansible 的目的基本相同(也是大材小用),但这需要不同的Ansible配置每个发行版。Nix,通过覆盖它是分布之上的一组应用程序,将其抽象出来。
(给其他读者的附注:不要担心,我通常会在超级用户和其他 SE 网站上使用没有 Nix 的新发行版测试我的大多数答案,这样我就会尝试在与大多数用户将运行的类似环境中重现问题。)
2请注意,NixOS 和 Nix 之间存在很大差异,初次了解 Nix 时很难弄清楚这一点。NixOS 本身是一个完全基于 Nix 的发行版。Nix(作为语言和打包系统)可以在大多数发行版上运行,尽管我还没有专门在 Void 上尝试过。