如何将参数传递给bash中的别名/函数并立即执行

时间:2017-08-01 15:23:38

标签: bash shell fish

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

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

然而,我正在使用鱼(Friendly Interactive SHell)和bash。我将所有自定义别名保存在单个文件中,无论我是使用fish还是bash,我都会加载。

我知道如何在bash中创建别名/函数,我知道如何在fish中创建别名/函数。我不知道,如何为鱼和bash立刻创建别名/功能。

它不必是别名/功能(它可以是前卫黑客),只是最终效果应该像预期的那样工作。

alias rmi =" function _rmi(){docker ps -a | grep $ 1 | awk' {print $ 1}' | xargs --no-run-if-empty docker rm -f;码头图片| grep $ 1 | awk' {print $ 3}' | xargs --no-run-if-empty docker rmi -f}; _rmi()"

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

功能去吧         sudo服务$ argv重启 端

上面被鱼接受,但现在是bash。

alias apts =" aptitude search"

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

如何统一它?

1 个答案:

答案 0 :(得分:2)

没有适当的通用解决方案,鱼与bash不兼容。

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

如果您希望执行的内容不会改变shell的内部状态,则可以改为编写脚本。

E.g。创建一个名为“rmi”的文件,其中包含

#!/bin/bash
docker ps -a | grep $1 | awk '{print $1}' | xargs --no-run-if-empty docker rm -f
docker images | grep $1 | awk '{print $3}' | xargs --no-run-if-empty docker rmi -f
在$ PATH(在bash和fish中)的某处。