"এক্সপোর্ট ভার = মান" কোথায় পাওয়া যায় না?


31

1990-এর দশকের মাঝামাঝি (!) - সম্ভবত এটি আমি তৈরি করেছি picked

export var=value

এটি একটি বাশিজম, এবং এটি বহনযোগ্য এক্সপ্রেশন

var=value
export var

আমি বহু বছর ধরে এটির পক্ষে ছিলাম, তবে সম্প্রতি, কেউ আমাকে এ সম্পর্কে চ্যালেঞ্জ জানিয়েছে এবং আমার যে দৃ belief় বিশ্বাস ছিল তা ব্যাক আপ করার জন্য আমি কোনও দলিল খুঁজে পাচ্ছি না।

গুগলিংয়ের "export: command not found"ক্ষেত্রে কারও পক্ষে আসলেই এই সমস্যা দেখা দিয়েছে বলে মনে হয় না, তাই এটি আসল হলেও, আমার ধারণা এটি খুব সাধারণ নয়।

(হিট আমি পেতে নতুনদের যারা কপি / আটকানো যতিচিহ্ন থাকতে পারে, এবং সঙ্গে শেষ পর্যন্ত হবে বলে মনে হচ্ছে 'export: command not foundবা কিছু যেমন, অথবা ব্যবহার করার চেষ্টা exportসঙ্গে sudoআর নবাগত csh। ব্যবহারকারীদের বোর্ন শেল সিনট্যাক্স ব্যবহার করার চেষ্টা)

আমি অবশ্যই বলতে পারেন যে এটা OS X এর উপর কাজ করে, এবং বেশী যেখানে বিভিন্ন লিনাক্স ডিস্ট্রো, উপর shহয় dash

sh$ export var=value
sh$ echo "$var"
value
sh$ sh -c 'echo "$var"'  # see that it really is exported
value

আজকের বিশ্বে এটি কী নিরাপদ তা বলা export var=valueনিরাপদ?

আমি পরিণতিগুলি কি তা বুঝতে চাই। যদি এটি "বোর্ন ক্লাসিক" ভি 7 তে পোর্টেবল না হয় তবে এটি ট্রিভিয়ার চেয়ে কষ্টেরই বেশি। যদি এমন প্রোডাকশন সিস্টেম থাকে যেখানে শেলটি সত্যই এই সিনট্যাক্সের সাথে লড়াই করতে পারে না, তবে এটি জানার জন্য দরকারী।


2
ধন্যবাদ আমি অবশেষে বুঝতে পেরেছিলাম কেন আমি প্রায়শই এমন জিনিসটি দেখি যা আমি মনে করি নিরর্থক: var = মান; রফতানির ভার
থারস্টেন স্টার্ক

2
এখনও কয়েকটি সোলারিস বাক্স চারদিকে লাথি মারছে এবং সেগুলি তাদের মানক সরঞ্জামগুলিতে কুখ্যাত fr বর্ণালীটির অন্য প্রান্তে, busyboxএটির নিজস্ব ন্যূনতম শেলটি আসে না ? (আমি একটি অবস্থান পারেন ডান এই দ্বিতীয় চেষ্টা করার জন্য নই।)
উলরিখ কালো

ধন্যবাদ উলরিচ, সোলারিস হয়তো এই অপরাধী হতে পারে কেন এই দীর্ঘ বাক্য গঠনটি এখনও রয়েছে।
থারস্টেন স্টার্ক

উত্তর:


20
export foo=bar

বোর্ন শেল দ্বারা সমর্থন করা হয়নি (70 এর দশকের একটি পুরানো শেল যা থেকে shঅ্যাশ / বাশ / কেএস / যশ / জ্যাশ ডেরাইভ আধুনিক আধুনিকায়ন)। এটি চালু হয়েছিল ksh

বোর্ন শেল এ, আপনি কি করতে পারেন:

foo=bar export foo

বা:

foo=bar; export foo

বা সাথে set -k:

export foo foo=bar

এখন, এর আচরণ:

export foo=bar

শেল থেকে খোল পর্যন্ত পরিবর্তিত হয়।

সমস্যাটি হ'ল অ্যাসাইনমেন্ট এবং সাধারণ কমান্ড আর্গুমেন্টগুলি পার্স করা হয় এবং আলাদাভাবে ব্যাখ্যা করা হয়।

foo=barউপরে একটি কাজ (কখনও কখনও) হিসাবে কমান্ড আর্গুমেন্ট হিসাবে কিছু শাঁস এবং অন্যদের দ্বারা ব্যাখ্যা করা হয়।

এই ক্ষেত্রে,

a='b c'
export d=$a

ব্যাখ্যা করা হয়:

'export' 'd=b' 'c'

কিছু শাঁস (( ashপুরানো সংস্করণ zsh(এস এম অনুকরণে) yash) সহ এবং:

'export' 'd=b c'

অন্যদের মধ্যে ( bash, ksh)।

যদিও

export \d=$a

অথবা

var=d
export $var=$a

সমস্ত শেলগুলিতে (যেমন 'export' 'd=b' 'c') একই ব্যাখ্যা করা হবে কারণ সেই ব্যাকস্ল্যাশ বা ডলার সাইন সেই শেলগুলি থামিয়ে দেয় যা এই আর্গুমেন্টগুলিকে অ্যাসাইনমেন্ট হিসাবে বিবেচনা করে এটি সমর্থন করে।

যদি exportনিজেই উদ্ধৃত হয় বা শেলের উপর নির্ভর করে কিছু সম্প্রসারণের (এমনকি কিছু অংশে) ফলাফল হয় তবে এটি বিশেষ চিকিত্সা পাওয়াও বন্ধ করবে।

এ সম্পর্কে আরও তথ্যের জন্য " স্থানীয় ভেরিয়েবল অ্যাসাইনমেন্টের জন্য কোটগুলি দরকার? " দেখুন।

বোর্ন সিনট্যাক্স যদিও:

d=$a; export d

অস্পষ্টতা ছাড়াই সমস্ত শেল দ্বারা একই ব্যাখ্যা করা হয় ( d=$a export dবোর্ন শেল এবং পসিক্স কমপ্লায়েন্ট শেলগুলিতেও কাজ করবে zshতবে shঅনুকরণ ব্যতীত সাম্প্রতিক সংস্করণগুলিতে নয় )।

এটি এর চেয়ে অনেক খারাপ হতে পারে। উদাহরণস্বরূপ দেখুন যেbash অ্যারে জড়িত থাকা সম্পর্কে সাম্প্রতিক আলোচনা

(আইএমও, সেই বৈশিষ্ট্যটি প্রবর্তন করা ভুল ছিল )।


আমি আশ্চর্য হয়ে গিয়েছিলাম যে সেমিকোলনের প্রয়োজন নেই foo=bar export foo, যেমনটি আমি এখানে সর্বদা দেখেছি। আমি জানি রফতানি একটি অন্তর্নির্মিত, তবে কেন এর foo=bar; foo=baz export foo; echo $fooচেয়ে আলাদা আচরণ হয় foo=bar; foo=baz /bin/cat /dev/null; echo $foo?
jrw32982 14,23 এ মনিকা

3
@ jrw32982, কারণ এটি একটি বিল্টিন। আপনি এখনও পেতে যে আধুনিক POSIX শাঁস কিন্তু শুধুমাত্র বিশেষ builtins যা exportহয়।
স্টাফেন চেজেলাস

যদিও এটি আলোচনা করে declare, তা নয় export, আমি পরামর্শ দিচ্ছি যে যে কেউ সুরক্ষার বিষয়ে চিন্তা করেন তারা স্টাফেনচাজেলাস বাশ.বগগুলিতে সরবরাহ করা লিঙ্কটিতে আলোচনাটি পড়ুন
1024

দুর্দান্ত উত্তর! তবে d=$a export dএটি অস্পষ্টতা ছাড়াই সমস্ত শাঁস দ্বারা একই ব্যাখ্যা করা পেতে অনেক সময় নিয়েছে ;-)
সংযোগ

@ আইকন, d=$a export dআর কাজ করে না zsh, তাই আমি উত্তর আপডেট করেছি। সম্পাদনা দেখুন।
স্টাফেন চেজেলাস

28

এটি কোনও বাশিজম নয় বরং একটি পসিক্স কমপ্লায়েন্ট সিনট্যাক্স। এটি আসলে অনেক দিন আগে একটি ক্রিশম হিসাবে শুরু হয়েছিল এবং পরে প্রায় সমস্ত বোর্ন সিনট্যাক্স ভিত্তিক শেলগুলি গ্রহণ করেছিল। একমাত্র কুখ্যাত ব্যতিক্রম /bin/shসোলারিস 10 এবং তার চেয়েও বেশি বয়সী যা বর্ন শেল সিনট্যাক্সের উত্তরাধিকারের সাথে লেগে থাকে। আশা করি, সোলারিস 11 একটি পসিক্স কমপ্লায়েন্ট শেল হিসাবে ব্যবহার করে /bin/sh

যাইহোক, exportউত্তরাধিকার বোর্ন শেলটিতে ইতিমধ্যে একটি বিল্টিন কমান্ড export: command not foundছিল সুতরাং গুগল করা বিভ্রান্তিকর ছিল।

exportপ্রভাবের সাথে একত্রিত হওয়ার পরে এখানে উত্তরাধিকার বোর্ন শেল আচরণ রয়েছে :

$ export var=22
var=22: is not an identifier

নস্টালজিক্সের জন্য, এই মূল বোর্ন শেলটির উত্স কোড পাওয়া যায় এবং বেশিরভাগ ইউনিক্স এবং লিনাক্স বিতরণের জন্য সংকলন করা যায়।


Oogleতিহাসিক অন্তর্দৃষ্টি এবং গুগলে সঠিক ত্রুটি বার্তার জন্য অনেক ধন্যবাদ! প্রত্যাশিত, ব্লাশ ...
ট্রিপলি

4
এটি মূল বোর্ন শেলের উত্স কোড নয়, এটি ওপেনসোলারিসের একটি পরিবর্তিত শ। এটি বোর্ন শেল কিন্তু বিবর্তনের দশক পেরিয়ে যাওয়ার পরেও। ইউনিক্স ভি 7 এর সাথে পাঠানো আসল বোর্ন শেলটি ইউনিক্স হেরিটেজ সোসাইটিতে
স্টাফেন শেজেলাস

1
@ স্টাফেনচাজেলাস কড়া কথা বলতে গেলে আপনি যথারীতি সঠিক। তবে নোট করুন যে আমি "আসল বোর্ন শেল" লিখিনি তবে "এই আসল বোর্ন শেল" হিসাবে আমি সোলারিস 10 দ্বারা ব্যবহৃত শেল এবং এর আধুনিক কোড যা আধুনিক প্ল্যাটফর্মগুলিতে সংকলন করা যায় তার উল্লেখ করছি। এও নোট করুন যে বোর্ন শেলটিতে 1977 এবং 1989 এর মধ্যে বেশ কয়েকটি বৈশিষ্ট্য যুক্ত হয়েছিল তবে শেষ 25 বছর বা তার পরেও মূলত বিকশিত হওয়া (নতুন প্ল্যাটফর্ম এবং বাগ ফিক্সগুলির সাথে বহিরাগত পোর্টিং / বাগিয়ে নেওয়া) বন্ধ হয়ে যায়।
jlliagre
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.