2012-01-05 32 views
95

Tôi đang cố gắng để gán đầu ra của cURL vào một biến như sau:đầu ra Gán cho biến trong Bash

#!/bin/sh 
$IP=`curl automation.whatismyip.com/n09230945.asp` 
echo $IP 
sed s/IP/$IP/ nsupdate.txt | nsupdate 

Tuy nhiên, khi tôi chạy kịch bản sau đây sẽ xảy ra:

./update.sh: 3: =[my ip address]: not found 

Làm cách nào để có được kết quả đầu ra thành $IP chính xác?

Trả lời

182

Trong trình bao, bạn không đặt $ ở trước biến bạn đang chỉ định. Bạn chỉ sử dụng $ IP khi bạn đang đề cập đến biến.

#!/bin/bash 

IP=$(curl automation.whatismyip.com/n09230945.asp) 

echo "$IP" 

sed "s/IP/$IP/" nsupdate.txt | nsupdate 
+1

Có cách nào để chặn thanh xuất và thanh tiến trình 'curl' không? Việc thêm '-silent' để trống' $ IP' ... – Dror

+4

@Dror, 'curl' gửi đầu ra ồn ào của nó đến stderr, do đó thanh tiến trình sẽ bị bỏ qua trong trường hợp của một tập lệnh như thế này. Tuy nhiên, '--silent' hoặc' -s' hoạt động tốt. Nếu bạn gặp khó khăn, vui lòng [hỏi một câu hỏi] (http://stackoverflow.com/questions/ask). – ghoti

+2

curl -sS hoạt động trong các phiên bản mới hơn của curl –

10

Tương tự với điều phức tạp hơn ... nhận vùng cá thể ec2 từ trong cá thể.

INSTANCE_REGION=$(curl -s 'http://169.254.169.254/latest/dynamic/instance-identity/document' | python -c "import sys, json; print json.load(sys.stdin)['region']") 

echo $INSTANCE_REGION 
+0

Đây chính xác là những gì tôi đã làm trong tập lệnh bash của tôi và bạn đã lưu tôi không cần phải cài đặt apt-get jq! – Nungster

Các vấn đề liên quan