我正在测试fish
shell,我正在寻找一种方法来实现我之前使用.bash_profile
做的事情。我使用switch
语句来区分主机名,允许我有1个集中/同步.bash_profile
,它包含一组独立的别名和函数,用于它所处理的每台机器(例如与工作相关的东西)我的工作电脑,以及与我个人电脑上的人员相关的东西。)
我知道~/.config/fish/functions
中的自动加载功能fish
相当于bash
中.bash_profile
的无条件定义函数。但有没有办法指定自动加载这些函数的子集?
谢谢!
答案 0 :(得分:3)
我做同样的事情:我的〜/ .config / fish / config.fish包含
set host_config ~/.config/fish/config.(hostname).fish
test -r $host_config; and source $host_config
set -e host_config
然后config。(hostname).fish包含我的函数和该机器的变量设置。
要注意的一件事是要记住,你 想要强制执行某些功能。
答案 1 :(得分:2)
Fish在变量fish_function_path
中搜索目录中的自动加载函数并加载它找到的第一个。在我的系统上,默认为
$fish_function_path: set in global scope, unexported, with 4 elements
$fish_function_path[1]: length=36 value=|/Users/krader/.config/fish/functions|
$fish_function_path[2]: length=29 value=|/usr/local/etc/fish/functions|
$fish_function_path[3]: length=40 value=|/usr/local/share/fish/vendor_functions.d|
$fish_function_path[4]: length=31 value=|/usr/local/share/fish/functions|
所以我要做的是预先添加一个名称包含主机名的目录,并将所有特定于机器的功能放在该目录中。并继续在〜/ .config / fish / functions 中添加通用的,非机器特定的功能。
答案 2 :(得分:0)
受到Krutis Rader的answer $fish_function_path
知识的启发,我在~/.config/fish/functions
中创建了以下文件夹结构:
$ tree -FC ~/.config/fish/functions/
├── PersonalComputer1/
│ └── PersonalComputer1_only_function.fish
├── PersonalComputer2/
│ └── PersonalComputer2_only_function.fish
├── WorkComputer1/
│ └── WorkComputer1_only_function.fish
├── WorkComputer2/
│ └── WorkComputer2_only_function.fish
├── personal/
│ └── personal_only_function.fish
├── work/
│ └── work_only_function.fish
└── common_function.fish
我将$fish_function_path
添加到我的~/.config/fish/config.fish
:
# Set up work/personal autoload function path
switch (hostname) WorkComputer1 WorkComputer2
set -gx fish_function_path "/Users/USERNAME/.config/fish/functions/work" $fish_function_path
case PersonalComputer1 PersonalComputer2
set -gx fish_function_path "/Users/USERNAME/.config/fish/functions/personal" $fish_function_path
end
# Set up host-specific autoload function path
set -gx fish_function_path "/Users/USERNAME/.config/fish/functions/"(hostname) $fish_function_path
$fish_function_path
导致/Users/USERNAME/.config/fish/functions/WorkComputer1
/Users/USERNAME/.config/fish/functions/work
/Users/USERNAME/.config/fish/functions
/usr/local/Cellar/fish/2.7.1/etc/fish/functions
/usr/local/share/fish/vendor_functions.d
/usr/local/Cellar/fish/2.7.1/share/fish/functions
看起来像:
public async Task<HttpResponseMessage> GetWidget(String id, String widgetType)
{
if (widgetType.Equals("WidgetA"))
{
DocumentDbRepository<WidgetA> repo = new DocumentDbRepository<WidgetA>();
var widget = await repo.GetItemAsync(id);
return (ControllerContext.Request.CreateResponse(HttpStatusCode.OK, widget));
}
else if (resourceBase.SystemType.Equals("WidgetB"))
{
DocumentDbRepository<WidgetB> repo = new DocumentDbRepository<WidgetB>();
var widget = await repo.GetItemAsync(id);
return (ControllerContext.Request.CreateResponse(HttpStatusCode.OK, widget));
}
...
}