![fish 和 bash 在将命令行参数传递给别名函数方面有何区别?](https://linux22.com/image/807455/fish%20%E5%92%8C%20bash%20%E5%9C%A8%E5%B0%86%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%E5%88%AB%E5%90%8D%E5%87%BD%E6%95%B0%E6%96%B9%E9%9D%A2%E6%9C%89%E4%BD%95%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
从我另一个问题的答案来看这里我了解了将命令行参数传递给 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
永久保存。
您现在可以运行预期的命令,如lsp
、lsp -R
等等lsp *.png*
。
您还可以使用“sh”程序“调用”bash 来为您运行脚本(准确地说,这将运行“dash”)。但是如果您使用 fish,那么您可能想要使用它提供的方法。我刚刚第一次测试它,到目前为止我印象非常深刻。
这些函数以文件形式存储在.config/fish/functions/
您的主目录中。在此示例中,文件名为lsp.fish
。您可以编辑该文件,然后重新启动 fish,或者只是再次定义并保存该函数。
学习 fish 的最佳方式是阅读其内置帮助。在 fish 中,只需输入
help
您将获得一份格式非常精美、内容丰富且易于阅读的手册。实际上,这会打开w3m
Web 浏览器,因为帮助是 html 格式:
(按 qy 退出)
答案2
我以前从来没见过这样的装置。
alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'
声明并运行函数的别名。首先你应该创建一个函数。在 bash 中,函数几乎在所有方面都取代了别名。
lsp() { ls -ah --color=always "$@" | less -R; }
把它放在你的~/.bashrc
文件中,或者如果你喜欢把函数放在一个单独的文件中,那么~/.bash_functions
你可以这样做,但你必须source
从该文件~/.bashrc