Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自Bash函数的交互式Bash Shell(TTY)_Bash_Docker_Shell_Kubernetes - Fatal编程技术网

来自Bash函数的交互式Bash Shell(TTY)

来自Bash函数的交互式Bash Shell(TTY),bash,docker,shell,kubernetes,Bash,Docker,Shell,Kubernetes,因此有一些命令,如docker exec-t,docker compose exec$CONTAINER/bin/bash,kubectl exec$POD\u NAME-it/bin/bash,我使用TTY连接到一个实例,TTY基本上从本地终端连接一个交互式shell实例 我已经围绕这些脚本或其他脚本构建了别名,但我现在有兴趣将它们转换为函数 所以之前,我可能有: alias container=`...; docker-compose exec $CONTAINER /bin/bash;`

因此有一些命令,如
docker exec-t
docker compose exec$CONTAINER/bin/bash
kubectl exec$POD\u NAME-it/bin/bash
,我使用TTY连接到一个实例,TTY基本上从本地终端连接一个交互式shell实例

我已经围绕这些脚本或其他脚本构建了别名,但我现在有兴趣将它们转换为函数

所以之前,我可能有:

alias container=`...; docker-compose exec $CONTAINER /bin/bash;` 
其中,
是最后一条语句所需的其他bash命令的任意集合。这成功地与炮弹交战

现在,我有:

function container {
    ...
    docker-compose exec $CONTAINER /bin/bash
}
这似乎是一个循环。我是了解Linux/Unix系统的初学者。谁能解释一下: -如何在我的
bash_profile
中的多行函数中包含它,而不是在别名中?
-当我执行这些命令时,到底发生了什么?我知道别名只是一个存储值……这对此处的行为有何影响?

我不确定您在
..
中的代码可能是导致错误的原因。
但她知道我所做的一切,而且成功了

以下是我更改的内容:
我使用了
docker
而不是
docker compose

我添加了
-it
标志。
还添加了
CONTAINER=$1
,以获取容器名称作为参数。

function container {                        
        CONTAINER=$1                        
        echo "Your code here"                     
        docker exec -it $CONTAINER /bin/bash
}                                           
只要把它放在
.bashrc
.bash\u profile
中,它就会工作。
据我所知,
.bash\u profile
.bashrc
只是shell脚本,在您打开新shell时,这些脚本都会源代码化到当前会话中。
因此,您放入其中的任何函数都将可用,就好像您使用常规脚本运行它一样

您还可以在它们内部找到更多文件,以保持它们的整洁,并使自定义命令和函数更易于移植。
像这样:
.bash\u profile

# dotfile dir is actually a git repo that i clone to any new machine i use.
# And Add this line only to my .bash_profile
if [ -f ~/dotfiles/.bash_customize ]; then
    . ~/dotfiles/.bash_customize
fi