gpt4 book ai didi

bash - eval $(docker-machine env默认值)在iterm启动脚本中不起作用

转载 作者:行者123 更新时间:2023-12-02 18:53:11 25 4
gpt4 key购买 nike

我有一个用于iterm的启动脚本,如果缺少,它将启动一个docker vm,如果已经存在,则连接到它。

iterm configuration

iterm_startup.sh

#!/bin/bash

typeset cmnd="docker-machine ls --filter name='default' --filter state='stopped' | grep default"
typeset ret_code

echo "running startup script ===> ${cmnd}"
eval $cmnd
ret_code=$?

# If not 0, means docker vm has already started
if [ $ret_code != 0 ]; then
eval $(docker-machine env default)
# If 0, means defai;t docker vm not yet started
elif [ $ret_code == 0 ]; then
docker-machine start default
fi

当docker计算机存在时,它进入运行 eval $(docker-machine env default)的块。但是,当我进入终端时,它仍然没有连接到docker vm。我必须再次在 shell 中手动运行 eval $(docker-machine env default)

有人可以帮我理解为什么 eval $(docker-machine env default)在脚本中无法按预期工作吗? :)

最佳答案

根据显示的设置,您似乎在要求iTerm“键入”脚本的路径,并在打开新的终端窗口时首先运行它。发生这种情况时,脚本将作为子进程运行。如果查看docker-machine env输出的内容,它只是一组export shell命令,所以现在您偶然发现了子进程不能影响其 parent 环境的一般规则。

简单的答案是将命令更改为“源”脚本,以使其在终端的 shell 环境中运行。尝试将“开始时发送文本”更改为

. ~/scripts/iterm_startup.sh

查看您的脚本,我怀疑您可以使用 docker-machine status使其更简单,并且即使您的计算机尚未运行,我也怀疑您需要执行“评估”步骤。
MACHINE=default
if [ $(docker-machine status "$MACHINE" 2>&1) != "Running" ]; then
docker-machine start "$MACHINE"
fi
eval $(docker-machine env "$MACHINE")

关于bash - eval $(docker-machine env默认值)在iterm启动脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51703011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com