如何将参数传递给 bash 中的 alias/function 并立即钓鱼

How to pass argument to alias/function in bash and fish at once

我的问题非常类似于:How to pass command line arguments to a shell alias?

我想创建接受参数的别名。上面问题中的人提出了功能,这确实是解决方案。

但是,我正在同时使用 fish(Friendly Interactive SHell)和 bash。我将所有自定义别名保存在单个文件中,无论我使用的是 fish 还是 bash.

,我都会加载该文件

我知道如何在 bash 中创建 alias/functions,我知道如何在鱼中创建 alias/functions。我不知道如何同时为鱼和 bash 创建 alias/function。

它不一定是 alias/function(它可以是前卫的 hack),只是最终效果应该像预期的那样。

别名 rmi="function _rmi() { docker ps -a | grep | awk '{print }' | xargs --no-run-if-empty docker rm -f ; docker images | grep | awk '{print }' | xargs --no-run-if-empty docker rmi -f }; _rmi()"

上面一个被bash接受,但鱼不接受。

函数去 sudo 服务 $argv 重新启动 结束

以上被鱼接受,但现在bash。

别名 apts="aptitude search"

bash 和 fish 都接受上面的普通别名,但参数不能在里面(必须在最后)。

如何统一呢?

对此没有合适的通用解决方案,fish 与 bash 不兼容。

此外,alias something="function" 是不必要的。你可以直接定义函数。

如果您希望执行的操作不会改变 shell 的内部状态,您可以制作一个脚本。

例如创建一个名为 "rmi" 的文件,其中包含

#!/bin/bash
docker ps -a | grep  | awk '{print }' | xargs --no-run-if-empty docker rm -f
docker images | grep  | awk '{print }' | xargs --no-run-if-empty docker rmi -f

$PATH 中的某处(在 bash 和 fish 中)。