2016-11-25 9 views
0

私のMakefileでは、仮想ボックスブリッジインタフェースIPを抽出しようとしていますが、コマンドの出力を保存してエコーしますが、 : "私はIPだけが必要です、私はVBoxManageCommandの後にawkパイプを添付しようとしましたが、動作させることはできません。何か案は?makefileのシェル実行結果から部分文字列を取り除く

コマンドにパイプを追加する
$(eval VB_IP := "$(shell VBoxManage guestproperty get machinename "/VirtualBox/GuestInfo/Net/2/V4/IP")") 

@echo $(VB_IP) ### This gives: Value: 10.224.199.19 

docker-machine ssh oasis "sed '/--label provider=virtualbox/a --insecure_registry $(VB_IP):5000' /var/lib/boot2docker/profile" ###This makes use of the extracted ip 

答えて

1

は動作するはずです:

test: 
    $(eval VB_IP := $(shell echo Value: 10.224.199.19 | cut -f2 -d:)) 
    echo $(VB_IP) 

それとも、砲撃の代わりに$(subst FROM,TO,TEXT)を使用することができます。

$(eval VB_IP := $(subst Value:,,$(shell echo Value: 10.224.199.19))) 
+0

$(エバールVB_IP1:= "$(シェルVBoxManage guestproperty GETマシン名 "/ VirtualBoxの/ GuestInfo /ネット/ 2/V4/IP")"); $(eval VB_IP:= $(シェルエコー$(VB_IP1)|カット-f2 -d :)) ? –

+0

@DavidKarlsson: 'VBoxManage'が私のマシン上で同じ出力を返さないので、私は' echo'を使いました。 – choroba

1

私たちが見つける前に、私たちはいくつかの実験をしてみてくださいする必要がありますあなたのために働く解決策。物事は内部と外部のルールが異なるように機能することに注意してください。ない任意のルールの内側に、これを試してみてください、そして私たちに結果を伝える:

VB_IP := $(word 2, $(shell VBoxManage guestproperty get machinename "/VirtualBox/GuestInfo/Net/2/V4/IP")) 
$(info the first result is $(VB_IP)) 

また、ルール内でこれを試してみてください、そして私たちに結果を伝えることができます:

somerule: 
    VBoxManage guestproperty get machinename "/VirtualBox/GuestInfo/Net/2/V4/IP" | cut -f2 -d: 
0

は、あなたの助けのためにこれをいただき、ありがとうございます私たちのために働くことになったものです:

# Update the docker-machine daemon with the insecure_registry from the brigded interface on virtualbox 
$(eval VB_IP_ := "$(shell VBoxManage guestproperty get machinename "/VirtualBox/GuestInfo/Net/2/V4/IP")") 
$(eval VB_IP := $(shell echo $(VB_IP_) | sed 's/[^ ]* //')) 

@echo Adding private docker repo: registry: $(VB_IP) 
docker-machine ssh oasis "sed -i '' '/--label provider=virtualbox/a --insecure_registry $(VB_IP):5000' /var/lib/boot2docker/profile" 
関連する問題