আমি কীভাবে বর্তমান শেলের জন্য বাশ বিকল্পগুলি তালিকাভুক্ত করতে পারি?


27

ব্যাশ ইন্টারপ্রেটার নিজেই বিকল্প আছে, যেমন

বাশের ম্যান পৃষ্ঠার 22-23 টি রেখা:

OPTIONS  
All of the  single-character shell options documented in the description of the set builtin command can be used as options when the shell is invoked.   In addition, bash interprets the following options when it is invoked:  
-c ...  
-i ...  
-l ...  
-r ...  

আমি ব্যাশ ম্যান পৃষ্ঠায় কয়েকটি অনুসন্ধান নিদর্শন ব্যবহার করেছি:

  • /^\s*set
  • /list

বর্তমান শেল প্রয়োগ করা এই সেটিংসের একটি তালিকা মুদ্রণ করা সম্ভব?

উত্তর:


26
printf %s\\n "$-"

একক স্ট্রিংয়ে একক অক্ষরের বিকল্পগুলি তালিকাবদ্ধ করবে।

এই প্যারামিটারটি ব্যবহার করা যেতে পারে:

set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"

-fএকসাথে $-- যদি থাকে তবে - এর জন্য একটি মান সংরক্ষণ করার সময় প্রথমে শেল আইলনাম এক্সপেনশনটি অক্ষম করতে $1। এর পরে, কোনও গ্লোব দেখা যায় না এবং শেষ হয়+f গ্লোবস আইলনেম প্রসারণটি আবার সক্ষম হয় এবং সম্ভবত অক্ষমও হয়।

উদাহরণস্বরূপ, যদি -fআইলনাম এক্সপেনশনটি ইতিমধ্যে অক্ষম করা হয় যখন এর জন্য মানটি $-প্রথম সংরক্ষণ করা হয়েছিল, তবে এর সংরক্ষিত মানটি হবে (কমপক্ষে) :

f

এবং তাই setআবার যখন চালানো হয়, এটি কাজ করে:

set +f -f

আপনি ঠিক যেখানে শুরু করেছিলেন তা কেবল আপনাকে পিছনে ফেলে।

set +o

সব তালিকা প্রস্তুত করা যাবে setটেবিল শেল অপশন (দেখুন জেসনের উত্তর জন্য shoptসক্ষম - যে একটি শব্দ - অপশন) একটি ফর্ম যে শেল reentry জন্য নিরাপদ হবে। এইভাবে, আপনি এছাড়াও করতে পারেন:

state=$(set +o)
set -some -crazy -options
eval "$state"

যথাক্রমে শেল বিকল্পগুলির স্থিতি সংরক্ষণ, পরিবর্তন এবং পুনরুদ্ধার করতে।

হ্যান্ডেল করতে shoptআয়ন এবং setএক বারেই টেবিল বিকল্পগুলি:

state=$(set +o;shopt)
#do what you want with options here
eval "$state"

শেলটির বর্তমানে সেট করা সমস্ত ভেরিয়েবলের একটি তালিকা যুক্ত করতে আপনি কোনও যুক্তি set ছাড়াই কল করতে পারেন - শেলের পুনরায় প্রবেশের জন্য উদ্ধৃতও। এবং আপনি - ব্যাশে করতে পারেন - পাশাপাশি typeset -fpবর্তমানে ঘোষিত সমস্ত শেল ফাংশন অন্তর্ভুক্ত করতে কমান্ডটি যুক্ত করতে পারেন। আপনি সব একসাথে এবং evalপ্রস্তুত যখন একসাথে করতে পারেন । এমনকি এর aliasজন্য আরও কিছু যুক্তি ছাড়াই আপনি কল করতে পারেন । যদিও ... এটি আবরণ পারে। আমি নেই "$@"- আপনি একটি রাখা আছে চাই যা bashপ্রথম বিন্যাস, আমি কাজ করার আগে অনুমান, set

নাহ, আছে trap। এই এক সামান্য মজার। সাধারণত:

trap 'echo this is my trap' 0
(echo this is my subshell; trap)

... শুধু প্রিন্ট হবে এই আমার subshell হয় কারণ subshell একটি নতুন প্রক্রিয়া এবং নিজস্ব সেট পায় trapগুলি - এবং তাই কোনো উত্তরাধিকারী না trapগুলি কিন্তু যারা যা তার পিতা বা মাতা স্পষ্টভাবে উপেক্ষিত হয়েছে - (যেমন trap '' INT)

যাহোক:

trap 'echo this is my trap' 0
save_traps=$(trap)

trapকমান্ড সাবস্টিটিউশন সাবসেলের মধ্যে এটি প্রথম এবং একমাত্র কমান্ড চালিত হলে বিশেষত আচরণ করে trapsযেটি শেলটিতে নিরাপদ পুনরায় প্রবেশের জন্য উদ্ধৃত হওয়া একটি ফর্ম্যাটে প্যারেন্ট শেলের বর্তমানে সেট করা একটি তালিকা পুনরুত্পাদন করবে । এবং তাই আপনি কি করতে পারেন save_traps, তারপর set আর্গুমেন্ট ছাড়া - বিশ্রামের এবং সমস্ত ইতিমধ্যে উল্লিখিত - এতে প্রায় কাছাকাছি সব শেল রাষ্ট্র উপর একটি লক পেতে। যদিও আপনি স্পষ্টভাবে যুক্ত করতে export -pএবং readonly -pমূল শেল বিভিন্ন বৈশিষ্ট্যগুলি পুনরুদ্ধার করতে চাইতে পারেন ।

যাইহোক, যথেষ্ট।


ধন্যবাদ, আপনার কোডটি সুন্দরভাবে কাজ করে। সুতরাং সমস্ত বিকল্পের একটি সম্পূর্ণ তালিকা পেতে, আপনি উভয় set +o এবং ব্যবহার করতে হবে shopt? ( shoptএকটি শব্দ হিসাবে সক্ষম হওয়ার জন্য settable, ম্যান পেজে ব্যবহৃত হয়, সুতরাং shoptableআমার জন্য কাজ করে)
The_velour_fog

@ ব্যবহারকারী 4668401 - আমি মনে করি এটি এটি করবে।
মাইকসার্ভ

টিএল; ডিআর, তবে একটি বিকল্প পরিবর্তন করতে এবং এটি 'যেমন ছিল তেমন' রাখার জন্য 3 লাইন সমাধানের জন্য +1000। স্ক্রিপ্টগুলি অনুলিপি / অনুলিপি / অতীত নির্দেশাবলী তৈরি করার সময় ঠিক কী প্রয়োজন তা ঠিক।
বাল্মীপুর

@ মেকজার্ভ মনে হয়েছে যে আয়নগুলি অন্তর্ভুক্ত করার জন্য রাষ্ট্র সংরক্ষণ করার সময় -p বিকল্পটি যুক্ত করা দরকার shopt, অর্থাতstate=$(set +o;shopt -p)
নিকাটার

9

থেকে manপৃষ্ঠা :

শপট
... কোনও বিকল্প নেই, বা -p বিকল্পের সাহায্যে সমস্ত সেটটেবল বিকল্পের একটি তালিকা প্রদর্শিত হবে, প্রতিটি সেট করা আছে কি না তার ইঙ্গিত সহ।
shopt | grep on

সমস্ত সক্ষম বিকল্পগুলির একটি তালিকা মুদ্রণ করবে।


ধন্যবাদ, ধন্যবাদ আপনি কি জানেন যে এটি বিকল্প setএবং উভয় দ্বারা স্থিরযোগ্য বিকল্পগুলি তালিকাভুক্ত করে shopt?
the_velour_fog 7 ই

@ ব্যবহারকারী 4668401 না, setআরও বেশি বিস্তৃত: ম্যান পেজ এন্ট্রি দেখুন
জেসনওয়ারিয়ান

যদি একটি একক অপশনটি কিনা চেক করতে:shopt <option>
কস

এর মধ্যে নামের (যেমন huponexit) 'অন' দিয়ে অপ্টস অন্তর্ভুক্ত থাকবে । ফিক্স করার সহজ উপায়shopt | grep on$
মাইক ডি

6

সমস্ত বিকল্পের তালিকা করতে:

set -o

একটি নির্দিষ্ট বিকল্প পরিদর্শন করতে:

set -o | grep <OPTION>

verboseউদাহরণ হিসাবে বিকল্প গ্রহণ করুন :

$ set -o | grep verbose
verbose         off

6

বিকল্প?: বাশ এ তিনটি বিকল্পের গ্রুপ রয়েছে।

  1. কমান্ড দ্বারা পড়া বা সেট অপশনগুলি set
    (ম্যানুয়ালটির জন্য এই কমান্ডটি ব্যবহার করুন LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash:)
    সমস্ত এক-বর্ণের বিকল্প:abefhkmnptuvxBCEHPT

    এছাড়াও বিকল্পগুলি (যার কোনও অক্ষরের সমতুল্য নেই):

    set -o emacs
    set -o history
    set -o ignoreeof
    set -o interactive-comments
    set -o pipefail
    set -o posix
    set -o vi
  2. কমান্ড দ্বারা পড়া বা সেট অপশনগুলি shopt
    (এই আদেশের সাহায্যে ম্যানুয়ালটি পড়ুন LESS=+/'shopt \[-pqsu\]' man bash':)
    তালিকাটি বেশ দীর্ঘ তবে মুদ্রণযোগ্য, ব্যবহার করুন:

    $ shopt -p

    বা অনুরূপ (তবে সমান নয়):

    $ shopt
  3. আমন্ত্রণে সেট করা যেতে পারে এমন বিকল্পগুলি:
    (ম্যানুয়ালটির জন্য আদেশ LESS=+/'^INVOCATION' man bash:)

    সমস্ত setবিকল্প:

    bash -abefhkmnptuvxBCEHPT

    সমস্ত shoptবিকল্প

    bash -O option

    কিছু বিকল্প যা কেবল ইনভোকিং ব্যাশে যখন অর্থবহ হয়:

    bash -lirsDc

    এবং, এছাড়াও (দীর্ঘ বিকল্প):

    bash --debugger --help --init-file file --rcfile file --login \
         --noediting --noprofile --norc --posix --restricted \
         --verbose --version

সমস্ত setএকটি অক্ষরের বিকল্প এবং -riএটি মুদ্রিত হয় $-

-i      Interactive  
Only read with `$-` (if it contains an `i`).
-r      Restricted
Also read with `shopt -p restricted_shell

উদাহরণ স্বরূপ:

$ echo 'echo $0 $-' | bash -abefhikmprtuvxBCEHPT -lri

লগইন শেল হিসাবে ব্যাশ কল করা কেবলমাত্র শপ্টের সাথে রিপোর্ট করা হয়:

-l      Login
read with `shopt -p login_shell`

এভাবে:

$ echo 'shopt -p login_shell' | bash -abefhikmprtuvxBCEHPT -lri
shopt -s login_shell

বিকল্পটি -nকোনও কোড দ্বারা পরীক্ষা করা যায় না, কারণ এর অর্থ: কোনও কোড চালাবেন না।


মুদ্রণের বিকল্পগুলি

চলমান শেলটির বিকল্পগুলির তালিকা তৈরি করার জন্য সেরা সরঞ্জামটি যা সেট করে সেট করা হয় setবা সেট করা সেট shoptএকই shopt। সেট বিকল্পগুলি তালিকাভুক্ত করতে:

shopt -o

কোনটি ঠিক হিসাবে কাজ করে set -oshopt -poহিসাবে একই ফলাফল পেতে ব্যবহার করুন set +o

শপটের বিকল্পগুলির তালিকা করতে:

shopt -p

যার মধ্যে আপনি সেটগুলি সেট করুন shopt -psবা আনসেট না করে মুদ্রণের জন্য চয়ন করতে পারেনshopt -pu

সমস্ত বিকল্প পেতে। যতটা সম্ভব সম্ভব দীর্ঘতর বিকল্প এবং কিছু ( -sDc) ইনভোকেশনটিতে মুদ্রণ করা যায় না:

$ echo $-; shopt -p ; shopt -po

এগুলিকে একটি ভেরিয়েবলে সঞ্চয় করতে:

$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"

এবং ভেরিয়েবলটি সমস্ত বিকল্প পিছনে সেট করতে ব্যবহার করা যেতে পারে:

$ eval "$storeoptions"

1

একটি নির্দিষ্ট বিকল্প পরিদর্শন করতে:

if shopt -q <OPTION>
then echo '<OPTION> is set'
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.