来自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