将命令行参数传递给别名函数的 fish 和 bash 之间的区别?

NES*_*NES 7 command-line bash alias fish

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

鱼,我可以通过编辑文件编辑别名config.fish~/.config/fish目录中添加这样一行

alias lsp='ls -ah --color=always | less -R;'
Run Code Online (Sandbox Code Playgroud)

它完美无缺。这应该相当于~/.bash_aliases在 bash 中编辑

但是当我尝试设置别名函数来传递这样的参数时

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

它对鱼不起作用?

在设置别名以传递命令行参数的方式上,fish 和 bash 之间是否存在任何差异,以防止第二个别名与 fish 而不是 bash 一起使用?

Ste*_*zzo 9

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

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

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end
Run Code Online (Sandbox Code Playgroud)

funcsave lsp因此永久保存。

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

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

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

学习鱼的最好方法是阅读它的内置帮助。从鱼中,只需输入

help
Run Code Online (Sandbox Code Playgroud)

你会得到一个格式很好、内容丰富且易于阅读的手册。实际上,这会打开w3mWeb 浏览器,因为帮助是 html 格式:

替代文字

(按 qy 退出)