首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash命令([前缀] docker )之前添加自动前缀

如何在bash命令([前缀] docker )之前添加自动前缀
EN

Stack Overflow用户
提问于 2019-11-22 09:34:40
回答 1查看 500关注 0票数 3

我想问一下,在某些命令之前是否有添加前缀的方法。有关这方面的大多数类似问题都是关于在命令输出中添加前缀,而不是在命令执行本身中添加前缀,下面是我的示例:

我需要连接到码头容器,我正在使用ConEmu和bash终端,所以我需要使用winpty前缀才能连接到容器的unix终端,如下所示:

代码语言:javascript
复制
docker exec -it my_container bash 

在以下方面的成果:

代码语言:javascript
复制
unable to setup input stream: unable to set IO streams as raw terminal: The handle is invalid.

所以我需要用:

代码语言:javascript
复制
winpty docker exec -it my_container bash

root@0991eb946acc:/var/www/my_container#

不幸的是,如果我从乞求的winpty添加,我的自动完成不工作,所以我需要首先编写对接命令,然后跳到命令的开头输入winpty。我希望每当我运行"docker“在bash之前添加winpty前缀时,bash就会自动检测。如何做到这一点?我知道我可以做个化名

代码语言:javascript
复制
alias de='winpty docker exec'

但是,我宁愿停留在正常的停靠命令流中,以实现自动完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 09:40:37

编写一个包装docker的shell函数。如果是docker exec命令调用winpty,则使用command返回到底层的docker二进制文件。

代码语言:javascript
复制
docker() {
    if [[ ${1:-} == exec ]]; then
        (set -x; winpty docker "$@")
    else
        command docker "$@"
    fi
}

我把set -x放在那里,这样它就可以在调用winpty时打印出来,这样就没有隐藏的魔力了。当我的外壳在做鬼鬼祟祟的事情时,我喜欢被提醒。

代码语言:javascript
复制
$ docker exec -it my_container bash
+ winpty docker exec -it my_container bash
root@0991eb946acc:/var/www/my_container#

我不熟悉winpty,但我希望winpty docker会调用对接者二进制文件,而不是这个shell函数。但是如果我错了,你就有麻烦了,因为它会在一个没完没了的递归循环中不断调用它自己。呀!如果发生这种情况,可以使用which来确保它调用二进制文件。

代码语言:javascript
复制
docker() {
    if [[ ${1:-} == exec ]]; then
        (set -x; winpty "$(which docker)" "$@")
    else
        command docker "$@"
    fi
}

如果您想知道shell语法:

  • ${1}是函数的第一个argument.
  • ${1:-},它确保您不会在启用set -u以检测未设置的变量时得到“未绑定变量”错误,variables.
  • "$@"是所有函数参数的数组。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58991297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档