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


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.