fish 和 bash 在将命令行参数传递给别名函数方面有何区别?

fish 和 bash 在将命令行参数传递给别名函数方面有何区别?

从我另一个问题的答案来看这里我了解了将命令行参数传递给 Bash 中的别名函数的可能性。

在 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 一起工作?

答案1

第二个命令实际上是一个小的 bash 脚本。Bash 是内置于 shell 中的编程语言。其他 shell 也使用它,但不一定,正如我们在此处看到的。

Fish 定义了与 bash 完全不同的编程语言,尽管它确实支持简单的以通常的alias name=command形式使用别名;您应该定义一个函数。这是您在 fish 中定义上述函数的方式:

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end

funcsave lsp永久保存。

您现在可以运行预期的命令,如lsplsp -R等等lsp *.png*

您还可以使用“sh”程序“调用”bash 来为您运行脚本(准确地说,这将运行“dash”)。但是如果您使用 fish,那么您可能想要使用它提供的方法。我刚刚第一次测试它,到目前为止我印象非常深刻。

这些函数以文件形式存储在.config/fish/functions/您的主目录中。在此示例中,文件名为lsp.fish。您可以编辑该文件,然后重新启动 fish,或者只是再次定义并保存该函数。

学习 fish 的最佳方式是阅读其内置帮助。在 fish 中,只需输入

help

您将获得一份格式非常精美、内容丰富且易于阅读的手册。实际上,这会打开w3mWeb 浏览器,因为帮助是 html 格式:

替代文本

(按 qy 退出)

答案2

我以前从来没见过这样的装置。

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

声明并运行函数的别名。首先你应该创建一个函数。在 bash 中,函数几乎在所有方面都取代了别名。

lsp() { ls -ah --color=always "$@" | less -R; }

把它放在你的~/.bashrc文件中,或者如果你喜欢把函数放在一个单独的文件中,那么~/.bash_functions你可以这样做,但你必须source从该文件~/.bashrc

相关内容