Bash'de değişkene çıktı atama


166

Böyle bir değişkene cURL çıktı atamak çalışıyorum:

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

Ancak, komut dosyasını çalıştırdığımda aşağıdakiler olur:

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

Çıktıyı doğru $IPşekilde nasıl girebilirim ?


Kabul edilen cevap doğrudur, ancak bu örnek ile burada bulunanlar arasında başka bir küçük fark vardır: echo'ya iletilen $ IP değişkeni çift tırnak içine alınmazsa, yakalanan kıvrılma çıktısının yalnızca son satırını verir.
Christopher Hunter

Teşekkürler @ChristopherHunter, buraya sadece bunu aramak için geldim. Neden böyle davranıyor?
Amey

@Amey, akıl yürütmenin tam olarak ne olduğunu söyleyemem, sadece argümanın çok satırlı bir dizesini verdiğinizde yankı böyle davranır.
Christopher Hunter

Yanıtlar:


288

Kabukta, atadığınız değişkenin önüne $ koymazsınız. $ IP'yi yalnızca değişkene başvururken kullanırsınız.

#!/bin/bash

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

echo "$IP"

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

2
Çıktı ve ilerleme çubuğunu bastırmanın bir yolu var mı curl? Eklenmesi -silentyapraklar $IP... boşaltın
Dror

4
@Dror, curlgürültülü çıktısını stderr'a gönderir, böylece böyle bir komut dosyasında ilerleme çubuğu göz ardı edilmelidir. Yine de, --silentya da -sgayet iyi çalışıyor. Sorunlarınız varsa, lütfen bir soru sorun .
ghoti

curl -sİlerleme çubuğunu ve hata mesajlarını devre dışı bırakmak için kullanın .
Searene

Her zaman yeniden yönlendirebilirsiniz stderr:IP=$(curl <url> 2>/dev/null)
BallpointBen

$ () sözdizimi ile bulma ben env değişkenleri kullanamıyorum örneğin bir e-posta sabit kodlama yerine değişken olarak $ 2, $ 3 kullanmak istiyorum. Bunların neden oluşturulmayacağına dair bir fikir var mı?
Evan Burbidge

28

Daha karmaşık bir şeyle aynı ... örneğin içinde ec2 örneği bölgesini almak.

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

Bu tam benim bash betiğimde yaptığım şeydi ve beni jpt!
Nungster

Pencerelerde bu nasıl yapılabilir? Ben yerine eğer $birlikte os.system, INSTANCE_REGION çıkışının değere sahip değil.
Heinz

Bu çok hatlı nasıl yapılır?
Khalil Gharbaoui
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.