এক সাথে একবারে সেট করা ভেরিয়েবলগুলি কীভাবে রফতানি করবেন?


39

setকমান্ড নীচের মতো সমস্ত স্থানীয় ভেরিয়েবল প্রদর্শন করে। আমি কীভাবে একবারে এই পরিবর্তনগুলি রফতানি করব?

>set
a=123
b="asd asd"
c="hello world"

একবারে রফতানি বলতে কী বোঝ? আপনি এক লাইনে সংজ্ঞায়িত করতে আধা কলোন ব্যবহার করতে পারেন ... যেমন = 123; বি = "এস্যাসেড এস্যাসেড"; সি = "হ্যালো ওয়ার্ল্ড"
রাজা



আপনার প্রশ্নটি অস্পষ্ট। আপনি যে setআউটপুটটি প্রদর্শন করছেন তা কি এটি? যদি তা হয় তবে তা হয় না bash। আপনি কি বিশেষ শেল ভেরিয়েবলগুলি সহ বর্তমানে সেট করা সমস্ত পরিবর্তনশীল রফতানি করতে চান? বা কেবল 3 টি ভেরিয়েবলের মতো export a b c?
স্টাফেন চ্যাজেলাস

export ${!T*}যার নাম দিয়ে শুরু হয় এমন কোনও নির্ধারিত প্যারামিটার রফতানি করবে T। দুর্ভাগ্যক্রমে, সমস্ত সংজ্ঞায়িত পরামিতিগুলির তালিকা সহজেই উত্পন্ন করার উপায় নেই বলে মনে হয় ।
চিপনার

উত্তর:


72

ভেরিয়েবলগুলি সেট করার আগে নিম্নলিখিত কমান্ডটি চালান:

set -a 

ম্যান পৃষ্ঠা:

-a
যখন এই বিকল্পটি চালু থাকে, এক্সপোর্ট অ্যাট্রিবিউট প্রতিটি ভেরিয়েবলের জন্য নির্ধারিত হবে যেখানে একটি কার্য সম্পাদন করা হয়;

এই বিকল্পটি বন্ধ করতে, set +aপরে চালান ।

উদাহরণ:

set -a
. ./environment
set +a

যেখানে environmentরয়েছে:

FOO=BAR
BAS='quote when using spaces'

13
যদিও ভেরিয়েবলগুলি অর্পণ করার আগে এটি সক্ষম করা আবশ্যক। এটি পূর্বে নির্ধারিত ভেরিয়েবলগুলিতে কিছু করে না।
চিপনার

1
@ চেপনার, ধন্যবাদ আমি তা উল্লেখ করতে ভুলে গেছি !!
নাইটিন

এটি স্বয়ংক্রিয়ভাবে ফাংশনগুলি একইভাবে রফতানি করেfunction example(){ echo good; }; export -f example
অলিভার আই

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. প্রথমে সমস্ত সেট পরিবেশের ভেরিয়েবলগুলি পান: (set -o posix ; set) তথ্যসূত্র: https://superuser.com/questions/420295/how-do-i-see-a-list-of- all-currently-defined-en वातावरण- variables- in- a- লিনাক্স-BA

  2. সমস্ত পরিবেশের পরিবর্তনশীল নামগুলি স্থান দ্বারা পৃথক করে পান: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' তথ্যসূত্র: নতুন লাইন ছাড়াই অজক-মুদ্রণ কলাম মান এবং কমা এবং https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk-কমান্ড

  3. এখন, আমাদের এই ভেরিয়েবলগুলি রফতানি করতে হবে, তবে xargs এটি করতে পারে না কারণ এটি শিশু প্রক্রিয়াটিকে কাঁটাচামচ করে দেয়, রফতানিটি বর্তমান প্রক্রিয়াধীন চলতে হবে। echo "export" ...আমরা চাইলে একটি কমান্ড তৈরি করুন, তারপরে এটি চালানোর জন্য use use ব্যবহার করুন। সবই: পি।


ওয়েলকম এবং ইউ এস এল এসই তে হয়তো আপনি আপনার পোস্ট সম্পাদনা করতে পারেন এবং কিছু ব্যাখ্যা দিতে পারেন।
আর্কেমার

1
পরিবেশের পরিবর্তনশীল নামগুলি কেবলমাত্র এজেড এবং এজেডের সমন্বয়ে গঠিত হবে তা ধরে নেওয়া ঠিক নয়। এগুলিতে সাধারণত আন্ডারস্কোর এবং অঙ্কগুলিও অন্তর্ভুক্ত থাকে, সুতরাং প্যাটার্নটি হবে [a-zA-Z_][a-zA-Z0-9_]*। আপনি যে শেলটি ব্যবহার করছেন তার উপর ভিত্তি করে এর উপর কিছু ভিন্নতা রয়েছে তবে এটি নিরাপদ / বহনযোগ্য পন্থা।
ক্রিস জনসন

গুড পয়েন্ট @ ক্রিস জোনসন - আপডেট!
উইল মুর তৃতীয়

3

আপনি exportভেরিয়েবলের নাম awkএবং evalফলাফলের আউটপুটের মাধ্যমে প্রেন্ডেন্ড করতে পারেন :

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvইতিমধ্যে রফতানি করা ভেরিয়েবলগুলি মুদ্রণ করে। নিউলাইন চরিত্রগুলিতে এমন ভেরিয়েবলগুলি থাকলে এটিও সঠিকভাবে কাজ করবে না।
স্টাফেন চেজেলাস

2

যদি আপনার শেলটি বাশ হয় (সম্ভবত অন্যান্য শেলগুলিও) এটি কাজ করে

export > /my/env/var/file

আপনার নতুন ফাইলটিতে সমস্ত সংজ্ঞায়িত ভেরিয়েবলের ডাম্প থাকবে ... এর মতো এন্ট্রি সহ

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

তারপরে সমস্ত এনভ ভার্স ইস্যু সহ বর্তমান শেলটি জ্যাক করা up

source  /my/env/var/file
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.