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

从我在这里的其他问题的答案中我了解了将命令行参数传递给Bash中的别名函数的可能性。

在Fish中,我可以通过编辑~/.config/fish目录中的config.fish文件并添加这样的行来编辑别名

 alias lsp='ls -ah --color=always | less -R;' 

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

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

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

它对鱼不起作用?

在设置别名以传递命令行参数的方式中,fish和bash之间是否存在任何差异,这些参数阻止了第二个别名使用fish而不是bash?

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

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

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

funcsave lsp所以永久保存它。

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

你也可以“调用”bash为你运行一个脚本,使用’sh’程序(这将精确地运行’dash’)。 但是如果你正在使用鱼,你可能想要使用它提供的方法。 我刚刚第一次测试它,到目前为止我印象非常深刻。

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

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

 help 

并且你会得到一个非常好的格式,广泛和易于阅读的手册。 实际上,这会打开w3m Web浏览器,因为帮助是html格式:

替代文字

(按qy退出)

我以前从未见过像这样的装置。

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

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

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

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