আমি কীভাবে কোনও কমান্ড থেকে বাশ-এর ​​কমান্ড হিসাবে আউটপুট আমদানি করতে পারি?


8

পদ্ধতি

Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

সমস্যা

ভেরিয়েবলগুলি সংরক্ষণের জন্য আমাকে একটি ব্যাশ স্ক্রিপ্টে কমান্ড হিসাবে আউটপুট পেতে হবে।

উদাহরণ

sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d'

এই কমান্ডটি এই লাইনগুলি প্রদান করে:

email_sender='some@email.com'
email_recipients='another@email.com'

স্ক্রিপ্টে কমান্ড হিসাবে আমি কীভাবে এই আউটপুট / লাইনগুলি পড়তে / চালাতে পারি? এই আউটপুটটি ফাইলটিতে সংরক্ষণ করা হয় এবং তারপরে এটি sourceকেবলমাত্র কমান্ড দিয়ে পড়া যায় ?

| sourceকমান্ডের শেষে চেষ্টা করেছি , তবে এটি কেবল ফাইলগুলি থেকে পড়ে।

আমি echoশুরুতে চেষ্টা করেছিলাম , কিন্তু এর কোনও ফল হয়নি।

ধন্যবাদ।

উত্তর:


15

প্লুমো যেমন আপনাকে দেখিয়েছে , আপনি অবশ্যই sourceতাদেরকে পারেন । যাইহোক, আমি এর বিরুদ্ধে সুপারিশ করব। আপনার যদি এরকম কিছু থাকে:

source <(sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d')

echo "$email_sender"

তারপরে, এক বছর পরে আপনি যখন ফিরে আসবেন এবং এই স্ক্রিপ্টটি দেখবেন তখন আপনার কোনও ধারণা থাকবে না যে এই email_senderপরিবর্তনশীলটি কোথা থেকে আসছে। আমি আপনাকে পরিবর্তে কমান্ডটি পরিবর্তন করার পরামর্শ দিচ্ছি এবং একটি ব্যবহার করুন যা কেবলমাত্র ভেরিয়েবলের মান দেয় এবং এর নামটি দেয় না। এইভাবে, প্রতিটি ভেরিয়েবলটি কোথা থেকে আসে তা আপনি সহজেই ট্র্যাক রাখতে পারেন:

email_sender=$(grep -oP 'email_sender=\K.*' webcheck-$category.cfg)
email_recipients=$(grep -oP 'email_recipients=\K.*' webcheck-$category.cfg)

আমি সম্মত হ'ল এটি আরও ভাল ;-) কমপক্ষে স্ক্রিপ্টগুলির জন্য আপনি পরে ব্যবহার করতে চান।
pLumo

উভয় ধন্যবাদ! সুন্দর এবং সহজ। ;)
লিঙ্গবী

দু'জনের জন্য এটি ঠিক আছে, আরও বেশি আমি একটি দিকনির্দেশ সহ লুপগুলির জন্য ব্যবহার করি: for var in email_sender email_recipient email_subject email_attachement etc ; do printf -v "${var}" '%s' "$(grep -oP $var'=\K.*' webcheck-$category.cfg)"; doneতবে এটি "সাধারণ" মানদণ্ডে ব্যর্থ।
Law29


0
#!/bin/bash

declare -A data
while IFS='=' read -r key value; do
    data[$key]=${value//\'/}
done < <(grep -E '^([^#].+=.*)' webcheck-$category.cfg)

অথবা

done < <(sed -n '/# Main configuration./,/# Websites./{//!p}' webcheck-$category.cfg)
# associative array.
echo ${data[email_sender]}
echo ${data[email_recipients]}

আউটপুট:

some@email.com another@email.com


-1

বাশ পড়তে অন্তর্নির্মিত জিনিসগুলি সুন্দরভাবে পরিচালনা করে।

read -d '' -r email_sender email_recipients < <(
  grep -oP 'email_sender=\K.*' webcheck-$category.cfg; 
  grep -oP 'email_recipients=\K.*' webcheck-$category.cfg
)

readস্টিডিন থেকে ভেরিয়েবলগুলিতে লাইন পড়েন। -d ''নিউলাইনগুলি বাদে হোয়াইটস্পেস বিভাজন বন্ধ করে দেয়। -rঅক্ষম \পলায়ন।

cmdA < <(cmdB)সেমিডিবি তে একইভাবে কাজ করে | সিএমডিএ, পূর্বের সিএমডিএ বাদে একটি সাবশেলের পরিবর্তে ~ এই ~ শেলটিতে চালিত হয়, যা প্রত্যাশার মতো কাজ করার জন্য পড়া প্রয়োজন।


1
আপনি কি লাইনের বিভিন্ন অংশ সম্পর্কে কিছু ব্যাখ্যা করতে পারেন?
সাইমন সুডলার

এটি সত্য, তবে এটি জিজ্ঞাসা করা প্রশ্নটির সাথে কীভাবে প্রাসঙ্গিক যেখানে কোনও ফাইলটি পড়ার উদ্দেশ্য var=value?
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.