问题:是否存在类似于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脚本的方法。缺点是:
然而,我觉得上升空间非常大:
答案 0 :(得分:2)
这不是一个基于鱼类的解决方案 - 但我怀疑鱼的回答是它不可能。
您可以将别名创建为.fish
或.sh
脚本,并将它们符号链接到/usr/local/bin
- 这将为您提供相同的行为。