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
所以永久保存它。
您现在可以运行预期的命令,如lsp
, lsp -R
, lsp *.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
该文件