একটি উলামের সংজ্ঞা কোথায় দেওয়া হয়েছিল তা পরীক্ষা করা সম্ভব?


24

একটি উপাধি যেমন কমান্ড llদিয়ে সংজ্ঞায়িত করা হয় alias

কমান্ডটি type llযা মুদ্রণের মতো জিনিসগুলি দিয়ে পরীক্ষা করতে পারি

ll is aliased to `ls -l --color=auto'

বা command -v llযা মুদ্রণ

alias ll='ls -l --color=auto'

বা alias llযা মুদ্রণ

alias ll='ls -l --color=auto'

কিন্তু আমি এটি মনে করতে পারে না যেখানে ওরফে সংজ্ঞায়িত করা হয়, যেমন অর্থাত একটি ফাইল .bashrc, অথবা চলমান শেল মধ্যে সম্ভবত নিজে। এই মুহুর্তে আমি নিশ্চিত না এটি এমনকি সম্ভব কিনা।

আমার দ্বারা লোড হওয়া সমস্ত ফাইলের মধ্যে কি কেবল সহজেই যাওয়া উচিত bashএবং সেগুলির প্রত্যেকটি পরীক্ষা করা উচিত?


আমি যে রান্নাঘরটি বলি তা বন্ধbash -xl
জেফ শ্যাচলার

উত্তর:


21

শেলটি এটি কী করছে তা দেখাতে বলার পরে ম্যানুয়াল সংজ্ঞাটি (ইতিহাসের লগগুলি, সম্ভবত) খুঁজে পাওয়া শক্ত হবে এবং তারপরে grepআরসি ফাইলে সেটগুলি সন্ধান করতে সহায়তা করা উচিত:

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

শেলটি যদি উপরের যে কোনও আমন্ত্রণ (যে ইন্টারেক্টিভভাবে নাল কমান্ডটি চালায়) এর সাথে প্রয়োজনীয় বিকল্পগুলি ক্যাপচার না করে, তবে script:

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

আর একটি বিকল্প হ'ল শেলটি স্পর্শ করে এমন সমস্ত ফাইল সন্ধান করার মতো কিছু ব্যবহার করা straceবা তারপরে নিজে হাতে যান (শেল বা প্রোগ্রামের পতাকা না থাকলে সহজ ); ম্যানুয়াল ফাইলনাম চেক করার জন্য স্ট্যান্ডার্ড আরসি ফাইলগুলি পর্যাপ্ত নয় যদি ওহ-মাই-জেডএস বা সাইট-নির্দিষ্ট কনফিগারেশনের মতো কোডটি কোথা থেকে বের করা হয় তবে কে জানে (অথবা তাদের উত্তরে সোরন্টার পয়েন্ট হিসাবে পরিবেশের পরিবর্তনশীলও থাকতে পারে) ।sysdiggrep-x


ধন্যবাদ! যদিও আউটপুটটি বিশ্লেষণ করা কিছুটা কঠিন, তবে আমি খুঁজে পেয়েছি যে ফাইলটি সংজ্ঞা দিয়েছিলাম তা সংজ্ঞায়িত করে। উক্ত নামটি তালিকার কোথাও উপস্থিত না থাকলে, উপনামটি ম্যানুয়ালি সংজ্ঞায়িত করা অনুমান করা কি নিরাপদ হবে?
পোলেমন

@ পোলেমন কিছুটা নিরাপদ; এটি এমন কোনও ফাইলে সংজ্ঞায়িত (বা হতে পারে) হতে পারে যা কার-কে-কারণ-বা-মুছে ফেলা হয়েছে বলে মুছে ফেলা হচ্ছে না (বিশেষত যদি শেল কাঠামোর কোনও প্রকার জটিলতা যুক্ত করে যা ব্যবহারকারী না করে তবে বোঝা).
ট্রিগার করুন

1
উপন্যাসটি খুঁজে পেতে কিছুটা সহজ সংজ্ঞা দেওয়া হয়েছে এমন পয়েন্টটি তৈরি করতে, আপনি PS4 ব্যবহার করতে পারেন, যা প্রতিটি লাইনে ট্রেসযুক্ত প্রিপেন্ড করা হয়:PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
মার্ক প্লটনিক

5

আমি এখানে grep -rlখুব দরকারী বলে মনে করি:

grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc

শব্দটি কোন ফাইলটিতে aliasব্যবহৃত হয়েছে তা আপনাকে বলবে ।

সম্ভবত মধ্যে ~/.bashrcএবং সম্ভবত ~/.bash_aliasesএটি উপস্থিত থাকলে।


এটি সম্পূর্ণরূপে নিশ্চিত হওয়া অসম্ভব যে এটি সমস্ত বিকল্পকে কভার করে। এই ফাইলগুলি কল করতে বা অন্য কোনও ফাইল লোড করতে পারে। ENV এর মতো পরিবেশের পরিবর্তনশীল বা $BASH_ENVঅন্যান্য কিছু ফাইল লোড করার জন্য বাশকে নির্দেশ দিতে পারে।

পরিবেশে BASH_ENV পরিবর্তনশীল সন্ধান করে, সেখানে উপস্থিত থাকলে এর মান প্রসারিত করে এবং প্রসারিত মানটি পড়ার ও সম্পাদনের জন্য কোনও ফাইলের নাম হিসাবে ব্যবহার করে।

এবং উপকরণ এমনকি একটি পরিবর্তনশীল (জোর খনি) সেট করে সংজ্ঞায়িত করা যেতে পারে:

BASH_ALIASES
একটি সহযোগী অ্যারে ভেরিয়েবল যার সদস্যরা ওরফে বিল্টইন দ্বারা রক্ষণাবেক্ষণ অনুসারে এলিয়াসগুলির অভ্যন্তরীণ তালিকার সাথে মিল রাখে। এই অ্যারেতে যুক্ত হওয়া উপাদানগুলি উপনাম তালিকায় উপস্থিত হয়


grep -rl alias ~/.bash*ইতিহাসের ফাইলগুলি মিথ্যা সাথে মেলে তবে BASH_ALIASES অ্যারেটি দেখানোর জন্য +1!
জেফ শ্যাচলার

2

আমি আসলে আপনার এলিয়াসগুলির উত্স তালিকাভুক্ত করার কোনও উপায় জানি না, তবে যেহেতু দেখে মনে হচ্ছে আপনি ব্যাশ ব্যবহার করছেন এটি আমার মনে হয় এগুলি সম্ভাব্য উত্স ফাইলগুলি:

/etc/profile
~/.profile
/etc/bash.bashrc
~/.bash_profile
~/.bashrc

আপনার নামটি খুঁজে বার করতে, যেমন গ্রাফিক করতে সক্ষম হওয়া উচিত grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc


বা সেখান থেকে অন্তর্ভুক্ত করা ফাইলগুলি ...
জেফ শ্যাচলার

@ জেফ শ্যাচলার - ঠিক আছে bash -x, যেমনটি আপনি উল্লেখ করেছেন ঠিক তেমন পছন্দ করার জন্য আপনার আরও জটিল কিছু প্রয়োজন হবে । আমি উপরের দিকে দ্রুত চালানো যথেষ্ট সহজ এবং যদি এটির নামটি খুঁজে না পাওয়া যায় তবে আপনি কার্যকর করতে পারেন steps
এডেমোন

1

মিশ্রন thrig এর উত্তর দিয়ে @ MarkPlotnick এর পরামর্শ , আপনি কিনা পরীক্ষা করতে পারেন BASH_ALIASES[ll]এটি ডাউন সংকীর্ণ সেট করা হয়। BASH_SOURCEঅ্যারে এবং LINENOভেরিয়েবল এখানে বিশেষভাবে উপকারী যেগুলোর। দুর্ভাগ্যক্রমে, উলেসটি BASH_ALIASES[ll]সেট হয়ে যাওয়ার পরে কেবল সেট করা আছে কিনা তা যাচাই করা সফল হবে এবং সুতরাং এই জাতীয় প্রথম লাইন সম্পূর্ণ অন্য কোনও ফাইলে থাকতে পারে।

PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
  grep 'll alias' -m1 -B1

আউটপুট দেওয়া যেমন:

   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'

আপনি এই চেকটি ব্যবহার করে শেলটিও শেষ করতে পারেন:

$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'

0

আমি সহজভাবে ব্যবহার করে সাফল্য পেয়েছি which

[crclayton@pc scripts]$ which foo
foo:     aliased to python $HOME/projects/python/foo.py

1
whichটিসিএস (এবং সম্ভবত পূর্ববর্তী সিএসএস) এবং জেডএস যেখানে এটি একটি বিল্টিন, এবং ব্যাশ-এ রেডহ্যাট-ফ্যামিলিতে ডিফল্ট প্রোফাইল ব্যবহার করে যা বাহ্যিক) জিএনইউ প্রোগ্রাম চালনার জন্য ক্লডেজ রয়েছে তবে এটি শেল ওরফে ডেটা খাওয়ায়, অন্যথায় নয় । আরও গুরুত্বপূর্ণ এটি কেবল উপনামটি কী সেট করা আছে তা কোথায় তা সেট করা ছিল তা নয় , যা এখানে Q ছিল।
dave_thompson_085


-1

অবশেষে আমি llদুটি ওয়েব শেল স্ক্রিপ্টে আমাদের ওয়েব সার্ভারের (সেন্টোস) জন্য উপন্যাস সংজ্ঞা পেয়েছি /etc/profile.d/:

  • /etc/profile.d/colorls.csh
  • /etc/profile.d/colorls.sh

আমি উপরের যেখানে সিস্টেম-ব্যাপী প্রফাইল ছিল মন্তব্য থেকে প্রথম লার্নিং দ্বারা এটি পাওয়া গেছে: /etc/profile। সেই ফাইলটিতে বলা হয়েছে যে সিস্টেম-ব্যাপৃত উপাত্তগুলি সংজ্ঞায়িত করা হয়েছে /etc/bashrcএবং সেই ফাইলটিতে আমি দেখেছি যে এটি বেশ কয়েকটি শেল স্ক্রিপ্টে লুপ করেছে /etc/profile.d/এবং তাই আমি grepসেই ডিরেক্টরিতে ব্যবহার করেছি এবং শেষ পর্যন্ত সংজ্ঞাগুলি পেয়েছি। আমি l.এটির একটি নামও পেয়েছি যা সমস্ত ডট ফাইলের তালিকা করে:

থেকে colorls.sh:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

(এখানে সমমানের উপাধি রয়েছে colorls.csh))


-1

প্রথমে নিম্নলিখিত কমান্ড ব্যবহার করুন

সমস্ত কার্য তালিকা

functions 

সমস্ত এলিয়াস তালিকাবদ্ধ করুন

alias 

আপনি যদি উপন্যাসটি খুঁজে না পান বা ফাংশনটি আরও আক্রমণাত্মক অনুসন্ধানের পদ্ধতি বিবেচনা করুন

বাশ সংস্করণ

bash -ixlc : 2>&1 | grep thingToSearchHere

Zsh সংস্করণ

zsh -ixc : 2>&1 | grep thingToSearchHere

বিকল্পগুলির সংক্ষিপ্ত বিবরণ

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.