簡體   English   中英

eval $(docker-machine env default)在iterm啟動腳本中不起作用

[英]eval $(docker-machine env default) not working in iterm startup script

我有一個iterm的啟動腳本,如果丟失則啟動docker vm,如果它已經存在則連接到它。

iterm配置

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)的塊eval $(docker-machine env default) 但是,當我去終端時,它仍然沒有連接到docker vm。 我必須再次在shell中手動運行eval $(docker-machine env default)

有人可以幫助我理解為什么eval $(docker-machine env default)在腳本中沒有按預期工作? :)

從您顯示的設置中,看起來您要求iTerm“輸入”腳本的路徑並在新終端窗口打開時首先運行它。 當發生這種情況時,腳本作為子進程運行。 如果你看看docker-machine env打印出來的東西,它只是一組export shell命令,所以現在你偶然發現了子進程不能影響其父對象環境的一般規則。

簡單的答案是將命令更改為“源”您的腳本,以便它在終端的shell上下文中運行。 嘗試將“開始時發送文本”更改為

. ~/scripts/iterm_startup.sh

看看你的腳本,我懷疑你可以使用docker-machine狀態讓它更簡單,我懷疑你需要做“eval”步驟,即使機器還沒有運行。

MACHINE=default
if [ $(docker-machine status "$MACHINE" 2>&1) != "Running" ]; then
  docker-machine start "$MACHINE"
fi
eval $(docker-machine env "$MACHINE")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM