从这里我的另一个问题的答案中,我了解了将命令行参数传递给 Bash 中的别名函数的可能性。
在 Fish 中,我可以通过编辑目录中的文件config.fish~/.config/fish
并添加这样的行来编辑别名
alias lsp='ls -ah --color=always | less -R;'
它工作得很好。这应该相当于~/.bash_aliases
在 bash中编辑
但是当我尝试设置一个别名函数来传递这样的参数时
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
它对鱼不起作用?
在设置别名以传递命令行参数以防止第二个别名使用 fish 而不是 bash 的方式上,fish 和 bash 之间是否有任何区别?
第二个命令实际上是一个小的 bash 脚本。Bash 是内置于 shell 中的编程语言。正如我们在这里看到的,它被其他 shell 使用,但不一定。
Fish 定义了一种与 bash 完全不同的编程语言,尽管它确实支持通常形式的简单别名;
alias name=command
您应该定义一个函数。这就是在fish中定义上述函数的方式:所以
funcsave lsp
永久保存它。您现在可以运行预期的命令,例如
lsp
、lsp -R
等lsp *.png*
。您还可以使用“sh”程序“调用”bash 为您运行脚本(准确地说,这将运行“dash”)。但是,如果您使用的是 fish,那么您很可能想要使用它提供的方法。我刚刚对其进行了第一次测试,到目前为止我印象非常深刻。
这些函数作为文件存储
.config/fish/functions/
在您的主目录中。在本例中,文件名将是lsp.fish
. 您可以编辑文件,之后重新启动fish,或者再次定义并保存函数。学习鱼的最好方法是阅读它的内置帮助。从鱼中,只需键入
您将获得一份格式精美、内容丰富且易于阅读的手册。实际上,这会打开
w3m
Web 浏览器,因为帮助是 html 格式:(按qy退出)
我以前从未见过这样的装置。
声明一个函数并运行它的别名。您应该首先创建一个函数。在 bash 中,函数几乎在所有方面都取代了别名。
把它放在你的
~/.bashrc
文件中,或者如果你更喜欢把函数放在一个单独的文件中,~/.bash_functions
那么你可以这样做,但你必须source
从~/.bashrc