鱼:别名中的空格

鱼:别名中的空格

我正在尝试为目录中的可执行文件添加别名,其中包含空格。例如:

alias myfile="/home/ben/test case/myfile"

现在,这并没有按照我想要的方式扩展(它认为/home/ben/test是可执行文件)。在 bash 中你可以添加额外的引号:

alias myfile="'/home/ben/test case/myfile'"

遗憾的是,这在鱼类中不起作用。我该怎么办?

答案1

鱼的别名只是一个包装内置函数,它的存在是为了向后兼容 POSIX shell。alias没有fish起到作用POSIX 别名

如果您想要 POSIX 的等效项alias,则必须使用缩写,被添加到鱼2.2.0:

abbr -a myfile "'/home/ben/test case/myfile'"

或者:

abbr -a myfile "/home/ben/test\ case/myfile"

答案2

本回答是从评论区迁移来的。

alias只是天真功能为了熟悉使用这个名称(并通过eval)创建函数,并且发现它有错误也就不足为奇了。我认为你最好学习如何编写鱼函数。

对于给定的示例,它被转换为以下行eval

function myfile --wraps /home/ben/test; /home/ben/test case/myfile $argv; end

因此,使用alias myfile="'/home/ben/test case/myfile'"也无济于事,因为它会给出一些愚蠢的输出,例如--wraps 'home/ben/test; '/home/ben/test case/myfile'(看看那个孤独的单引号!)

所以自己写一个函数,你会发现fish就是这么废话,破坏了交互的乐趣和友好​​性:

function myfile --wraps '/home/ben/test case/myfile'; '/home/ben/test case/myfile' $argv; end

请注意,我还没有真正测试过这一点,并且只有在我正确理解语法的情况下它才有效。

事实上,f??????-id??tic-shell当我第一次读完它的内置函数时,我在 40 分钟内就已经受够了。

答案3

不幸的是你被鱼身上的虫子,其中包含空格的别名被破坏。

无论如何,编写一个替代品是相当容易的:

function myfile
    /home/ben/test\ case/myfile $argv;
end
funcsave myfile

这将定义一个新函数 ( myfile),设置内容以使用所有命令行参数运行目标 ( $argv),然后保存该函数以便自动加载 ( funcsave)。

正如另一个答案中指出的,缩写命令abbr是定义别名的另一种选择,尽管在您的情况下我认为函数(别名)实际上更有用。

相关内容