বাশে ভেরিয়েবলকে আউটপুট বরাদ্দ করুন


165

আমি সিআরএল আউটপুটকে এর মতো একটি ভেরিয়েবলে নির্ধারণের চেষ্টা করছি:

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

যাইহোক, আমি স্ক্রিপ্টটি চালানোর সময় নিম্নলিখিতটি ঘটে:

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

আমি কীভাবে $IPসঠিকভাবে আউটপুট পেতে পারি ?


গৃহীত উত্তরটি সঠিক, তবে সেই উদাহরণ এবং এখানে যা রয়েছে তার মধ্যে অন্য একটি ছোটখাটো পার্থক্য রয়েছে: যদি প্রতিধ্বনিত $ আইপি ভারটি ডাবল উদ্ধৃতিতে আবৃত না হয় তবে এটি কেবল ধরা পড়া কার্ল আউটপুটটির শেষ লাইন আউটপুট দেবে।
ক্রিস্টোফার হান্টার

ক্রিস্টোফার হান্টারকে ধন্যবাদ, আমি এই সন্ধানের জন্য এখানে এসেছি। কেন এটি এভাবে আচরণ করে?
আমে

@ অমি যুক্তিটি ঠিক কী তা বলতে পারি না, আপনি যখন যুক্তি হিসাবে বহু-লাইনের স্ট্রিংটি দেন তখন প্রতিধ্বনিটি এ জাতীয় আচরণ করে।
ক্রিস্টোফার হান্টার

উত্তর:


288

শেল-এ, আপনি যে ভেরিয়েবলটি নির্ধারণ করছেন তার সামনে আপনি কোনও put রাখবেন না। আপনি যখন ভেরিয়েবলটি উল্লেখ করছেন কেবল তখনই আপনি আইপি ব্যবহার করেন।

#!/bin/bash

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

echo "$IP"

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

2
এর আউটপুট এবং অগ্রগতি দমন করার উপায় আছে curl? যোগ করার পদ্ধতি -silentপাতার $IPখালি ...
Dror

4
@ ডার্ক, curlএর গোলমাল আউটপুটটি স্ট্ডারের কাছে প্রেরণ করে, সুতরাং স্ক্রিপ্টের ক্ষেত্রে অগ্রগতি বারটিকে এড়ানো উচিত। তবুও, --silentবা -sঠিক কাজ করে। আপনার যদি সমস্যা হয় তবে দয়া করে একটি প্রশ্ন জিজ্ঞাসা করুন
ঘোটি

curl -sঅগ্রগতি বার এবং ত্রুটি বার্তা অক্ষম করতে ব্যবহার করুন।
সমুদ্রের

আপনি সর্বদা পুনর্নির্দেশ করতে পারেন stderr:IP=$(curl <url> 2>/dev/null)
বলপয়েন্টবেন

আমি v () সিনট্যাক্সের সাহায্যে এনভিলিভ ভেরিয়েবলগুলি ব্যবহার করতে পারছি না যেমন ইমেইলকে হার্ড কোডিংয়ের পরিবর্তে আমি ভেরিয়েবল হিসাবে $ 2,। 3 ব্যবহার করতে চাই। এগুলি কেন রেন্ডার করবে না সে সম্পর্কে কোনও ধারণা?
ইভান বার্বিজ

28

আরও জটিল কিছু হ'ল ... উদাহরণের মধ্যে থেকে ই 2 উদাহরণ অঞ্চলটি পাওয়া।

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

আমি আমার বাশ স্ক্রিপ্টে ঠিক এটি করছিলাম এবং আপনি আমাকে জেপি-র ইনস্টল করতে বাঁচিয়েছিলেন!
নংস্টার

উইন্ডোতে এটি কীভাবে করা যায়? যদি আমি বিকল্পটির $সাথে প্রতিস্থাপন করি তবে os.systemINSTANCE_REGION এর আউটপুটটির মান থাকবে না।
হেইঞ্জ

কীভাবে সেই মাল্টি-লাইন তৈরি করবেন?
খলিল ঘরবাউই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.