【问题标题】:How to pass argument to alias/function in bash and fish at once如何一次将参数传递给bash和fish中的别名/函数
【发布时间】:2018-01-08 13:19:43
【问题描述】:

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

我想创建一个可以接受参数的别名。上述问题中的人建议的功能,这确实是解决方案。

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

我知道如何在 bash 中创建别名/函数,并且我知道如何在 fish 中创建别名/函数。我不知道,如何同时为 fish 和 bash 创建别名/函数。

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

alias rmi="function _rmi() { 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 }; _rmi()"

bash 接受以上一个,但fish 不接受。

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

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

别名 apts="aptitude search"

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

如何统一?

【问题讨论】:

  • 如果您要删除图像,请查看docker system prune --help。此命令更适合您使用别名执行的操作。与您提出的问题无关,但可能有助于构建更好的解决方案

标签: bash shell fish


【解决方案1】:

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

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

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

例如创建一个名为“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 中)。

【讨论】:

  • 我可以创建别名来调用这些脚本,所以这是通用解决方案!
猜你喜欢
  • 2016-10-18
  • 2011-05-02
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2011-11-18
相关资源
最近更新 更多