যুক্তি ব্যতীত সেট কমান্ড কী করে?


19

setতর্ক ছাড়াই কমান্ড কী করে ?

যেহেতু আমি দেখতে পাচ্ছি এটি আমার পরিবেশের ভেরিয়েবলগুলি কেবল envকমান্ডের মতোই বর্ণানুক্রমিকভাবে মুদ্রণ করে । এবং আরও কিছু আলাদা তথ্য (ভেরিয়েবল? ফাংশন?) প্রিন্ট করে:

__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote () 
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}
quote_readline () 
{ 
    local quoted;
    _quote_readline_by_ref "$1" ret;
    printf %s "$ret"
}

এটি কী এবং কোথা থেকে এসেছে?

আমি setতর্ক ছাড়াই কমান্ড সম্পর্কে তথ্য পাই না । আসলে আমার লিনাক্স বিতরণে মোটামুটি manপৃষ্ঠা নেই set


1
"এই অন্তর্নির্মিতটি এত জটিল যে এটি নিজস্ব বিভাগের দাবিদার ves" দস্তাবেজগুলি
গ্যালাথ

উত্তর:


14

set অন্তর্নির্মিত একটি শেল যা সমস্ত শেল ভেরিয়েবলগুলি প্রদর্শন করে, কেবল পরিবেশের নয়, এবং শেল ফাংশনগুলিও, যা আপনি তালিকার শেষে দেখছেন।

ভেরিয়েবলগুলি একটি সিনট্যাক্সের সাথে প্রদর্শিত হয় যা লাইনগুলি সম্পাদন বা সসোর্স করার সময় সেগুলি সেট করার অনুমতি দেয়।

bash ম্যানুয়াল পৃষ্ঠা থেকে :

যদি কোনও বিকল্প বা আর্গুমেন্ট সরবরাহ না করা হয় তবে বর্তমান শৈল ভেরিয়েবল এবং ফাংশনগুলির নাম এবং মানগুলি বর্তমান লোকেল অনুসারে সাজানো এমন ফর্ম্যাটে সেট করা যা বর্তমানে সেট-এর ভেরিয়েবলগুলি সেট বা পুনরায় সেট করার জন্য ইনপুট হিসাবে পুনরায় ব্যবহার করা যেতে পারে।

বিভিন্ন শেলের উপর, আচরণটি অগত্যা একই রকম হয় না; উদাহরণস্বরূপ, ksh setশেল ফাংশন প্রদর্শন করে না।


3
এটি কারণ kshশেল ভেরিয়েবলে ফাংশন সংজ্ঞা সংরক্ষণ করবেন না।
cuonglm

2
@cuonglm ডিজিজেকে তৈরি একটি বুদ্ধিমান ডিজাইনের সিদ্ধান্ত! ;-)
jlliagre 15'15

6

কারণ setআউটপুট রয়েছে এবং which setকিছুই আপনি জানে না এটি আপনি যে শেলটি ব্যবহার করছেন তার অংশ, সম্ভবত বাশ returns

ম্যান বাশ এর বহুবার উল্লেখ করেছে তবে অনলাইন ডকুমেন্টেশনে লিঙ্ক করা আরও সহজ ।

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

সেটটির কল স্পেসিফিকেশন রয়েছে:

set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]

সুতরাং যদি আপনি এটি কমান্ড লাইনে মানুষের মধ্যে সন্ধান করতে চান তবে আপনি অনুসন্ধান করতে পারেন

/set.*abef

which setআপনার শেল উপর নির্ভর করে। কমপক্ষে zshএটি আপনার জন্য রিপোর্ট করবে। এছাড়াও আপনি পড়তে পারেন এই আরো বিস্তারিত জানার জন্য।
cuonglm

প্রশ্নটি কেবল মারামারি ব্যতীত সম্পর্কিত নয় কারণ এটির বাজারের বিশাল আধিপত্য রয়েছে, এবং অ-ডিফল্ট শেল ব্যবহার করা যে কেউ এই প্রশ্ন জিজ্ঞাসা করার প্রয়োজন হবে না।
ব্যবহারকারী 1133275

5

setহ'ল একটি শেল বিল্টিন , সেট এবং আনসেট শেল বিকল্প এবং অবস্থানগত পরামিতিগুলির জন্য ব্যবহৃত।

আর্গুমেন্ট ব্যতীত, setবর্তমান লোকালে সাজানো সমস্ত শেল ভেরিয়েবল (বর্তমান সেশনে উভয় পরিবেশের ভেরিয়েবল এবং ভেরিয়েবল) মুদ্রণ করবে ।

আপনি বাশ ডকুমেন্টেশনও পড়তে পারেন ।


কয়েকটা সতর্কতা আছে।

set "$var"varমান নির্ধারণ করবে $1। যদি বা $varদিয়ে শুরু হয় , তবে সামগ্রীটি শেল বিকল্পগুলির ক্রম হিসাবে বিবেচিত হবে। যদি কোনও অবৈধ বিকল্প থাকে তবে বেশিরভাগ পসিক্স শেল ত্রুটিটি মুদ্রণ করবে। এবং ইন , এমুলেশন কেবল ত্রুটি মুদ্রণ করে না, বৈধ বিকল্পগুলিও সেট করে। প্রথম অবৈধ বিকল্পে বিকল্পগুলি সেট করা বন্ধ করার সময় , সেগুলি সমস্ত বরাদ্দ করবে। ইন :-+$var$varyashzshshkshyashzshyash

var=-fxd; set "$var"

fএবং xউপস্থিত হবে $-, যখন:

var=fdx; set "$var"

শুধুমাত্র fবর্তমান $-। উভয় ক্ষেত্রেই, fএবং ইন এবং ইমুলেশন সহ xউপস্থাপন করবে ।$-zshshksh

আপনাকে সেই পরিস্থিতি থেকে রক্ষা করতে আপনি --অবস্থানগত পরামিতি সেট করার প্রথম যুক্তি হিসাবে পাস করতে পারেন এমনকি এটি শুরু করে -বা +:

var=-fdx; set -- "$var"

নির্ধারণ $varকরা $1হবে, তার বিষয়বস্তু নির্বিশেষে।

set -- কোনও তর্ক ছাড়াই সমস্ত অবস্থানগত পরামিতিগুলি আনসেট করবে।

যদি প্রথম যুক্তিটি হয় -তবে আচরণটি অনির্দিষ্ট। সমস্ত পরিচিত POSIX শেলগুলি আনসেট xএবং vবিকল্পগুলি (ব্যতীত posh) করবে এবং -অবস্থানগত পরামিতিগুলির পরে কিছু বরাদ্দ করবে :

set -xv - -f

নিযুক্ত -fকরা হবে $1set -এছাড়াও অবস্থানগত পরামিতিগুলি সেট করে নি। শিলি ওশও এরকম আচরণ করে। উত্তরাধিকারী আন সেট vএবং xবিকল্পগুলি না।

কেবলমাত্র পসিক্স শেল ব্যতিক্রম yash, যা -প্রথম অবস্থানিক পরামিতি হিসাবে বিবেচনা করে :

$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx

শিলি sh এমনকি -যুক্তি উপস্থিত থাকলে কিছুই করেনি :

$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s

$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs

বুঝলাম, কেন মানুষ যে কোন জায়গায় এর প্রতি সংযোগ আছে কিন্তু প্রথম এক ... আপনি মধ্যে পার্থক্য উল্লেখ করতে পছন্দ করতে পারেন না set -- $unset, set - $unset, set $unset, এবং set "$unset"ইত্যাদি - এটা সাধারণত যারা গোলযোগ যে প্রথম স্থানে ঝামেলা যে ধরনের মানুষকে পেতে হবে।
মাইকজার্ভ

@ মাইকজার্ভ: ঠিক আছে, আমি আরও বিশদ যুক্ত করেছি, তবে ব্যবহারের সময় আপনি কী বোঝাতে চেয়েছিলেন তা পেলাম না $unset
cuonglm

@cuonglm কমান্ডটি একটি আনসেট ভেরিয়েবলের set $unsetমতো ঠিক সমানভাবে কাজ করবে set। তবে set "$unset" লক্ষণীয় হবে না, যদি unsetআসলে একটি আনসেট ভেরিয়েবল হয়। একটি set - $unsetসরানো -vএবং -xসেট বিকল্পগুলি (ব্যাশে) সরিয়ে দেয় ।

@ বাইনারিজেব্রা: আহ, অবশ্যই আমার জন্য এটি ব্যবহার করা ভাল unset_var। এবং এটিও খালি set "$unset"সেট করা $1আছে তা নোট করুন । এটি শেল সম্প্রসারণ সম্পর্কে, কঠোরভাবে নয় set, তাই আমি এটি উল্লেখ করি না।
cuonglm

1
@ মিমক্জার্ভ: উপস্থিত হওয়ার সাথে এর আচরণ poshএবং yashভিন্নতা রয়েছে -। আপনি আমার আপডেট করা (এবং এটি উন্নত করতে নির্দ্বিধায়) পড়তে পারেন।
cuonglm

2

আপনি যদি ব্যাশ শেলের ভিতরে কাজ করছেন তবে টাইপ করুন help set

মুদ্রিত সাহায্যের শেষে, পড়ুন:

যদি কোনও এআরজি দেওয়া না হয় তবে সমস্ত শেল ভেরিয়েবল মুদ্রিত হয়।

সুতরাং, কোনও আর্গুমেন্ট setশেলের সাথে পরিচিত সমস্ত ভেরিয়েবল মুদ্রণ করে।


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