bash – 鱼壳中的别名替换

问题:是否存在类似于
Bash别名替换的Fish或者保持代码清洁和干燥的建议最佳做法是什么?

背景:Bash中有一个非常有用的别名特征叫做别名替换.它在手册页中简要提到:

alias [-p] [name[=value] ...]
    ...
    A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded.
    ...

通过示例可以容易地传达该功能的强大功能.考虑到许多用户定义了一个grep别名.这是我的:

# extended regex, skip binaries, devices, sockets, & dirs, colored, & line
# -buffered. use a non- canonical alias instead of GREP_OPTIONS which may wreck
# poorly written scripts
alias g='grep -EID skip -d skip --color=auto --line-buffered'

同样,许多相同的用户为xargs定义了一个别名.这是我的没有别名替换:

alias x='xargs -rd\\n' # \n delimited, don't run on empty in

最后,这是我可能想要使用它但它不起作用:

$find|x g foo
xargs: g: No such file or directory

此命令失败,因为x已扩展为xargs,并且找不到名为g的可执行文件.有很多解决方法,但我认为大多数都很糟糕.但是,通过仅添加尾随空格,shell将代表我们执行别名替换,命令将按预期工作:

alias x='xargs -rd\\n ' # \n delimited, don't run on empty in, + expansion
#                    ^-- this space is for expanding a subsequent alias

请记住,这只是一个例子,不一定是实际的用例.

更新2015-05-06

我从未找到过Fishism解决方案,但我觉得替代方案值得评论.我采取了在〜/ bin中创建shell脚本的方法.缺点是:

> shell配置现在是多个文件.
>翻译失去对其他简单别名和功能的检查.

但是,我觉得好处很大:

>脚本可以用任何语言编写.
>脚本完全独立于shell选择.尝试新的弹壳是非常无痛的.拥有一个不需要用多种语言重写或维护的单个提示脚本是一件令人高兴的事.

最佳答案 这不是基于鱼类的解决方案 – 但我怀疑鱼的回答是不可能的.

您可以将别名创建为.fish或.sh脚本,并将它们符号链接到/usr/local/bin – 这将为您提供等效行为.

点赞