2012-01-05 37 views
95

Estoy intentando asignar la salida de Curl en una variable de este modo:salida Asignar a la variable en Bash

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

Sin embargo, cuando corro el guión ocurre lo siguiente:

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

¿Cómo puedo obtener la salida en $IP correctamente?

Respuesta

182

En shell, no pone $ frente a una variable que está asignando. Solo usas $ IP cuando te refieres a la variable.

#!/bin/bash 

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

echo "$IP" 

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

¿Hay alguna manera de suprimir la salida y la barra de progreso de 'curl'? Al agregar '-silent' deja' $ IP' vacío ... – Dror

+4

@Dror, 'curl' envía su salida ruidosa a stderr, por lo que la barra de progreso debe ignorarse en el caso de un script como este. Sin embargo, '--silent' o' -s' funciona bien. Si tiene problemas, por favor [haga una pregunta] (http://stackoverflow.com/questions/ask). – ghoti

+2

curl -sS funciona en versiones más nuevas de curl –

10

Lo mismo con algo más complejo ... obtener la región de la instancia ec2 desde la instancia.

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

Esto era exactamente lo que estaba haciendo en mi script bash y me salvaste de tener que obtener-get install jq! – Nungster

Cuestiones relacionadas