শিশু শেল দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত বাশ সম্পূর্ণ করার সেটিংস কীভাবে পাবেন?


3

আমার কাছে একটি প্রকল্প-নির্দিষ্ট সেটআপ ফাইল রয়েছে যা gnu স্ক্রিন চালানোর আগেই উত্স।

সেই ফাইলে, আমি আমার পরীক্ষার কমান্ড এবং সম্পর্কিত পরীক্ষাগুলির জন্য বাশ সম্পূর্ণ করতে সেট আপ করেছি।

এটি দেখতে এরকম দেখাচ্ছে:

$PROJECT_HOME/app/bin/lib/behat_suites.sh  # _behat_suites() defined here
complete -F _behat_suites run_behat_suite
export -f _behat_suites

সমস্যাটি হ'ল, প্রতিটি স্ক্রীন একটি নতুন শেল, এবং complete -Fসেটিংটি টিকতে পারে না (তারপরে পরিবেশটি থাকে - তারা যথাযথ সাবসেল হয়)।

এর exportঅর্থ হল ফাংশনটি পর্দার সাব-শেলগুলিতে টিকে আছে, তবে সম্পূর্ণ করার সেটিংস নিজেই হয় না।

ডাইরেনভের মতো কোনও সরঞ্জামের সংক্ষিপ্তকরণ, বা আমার ব্যবহারকারী in / .bashrc এ সেটিংস স্থাপন করা, চাইল্ড শেল প্রক্রিয়া দ্বারা উত্তরাধিকার সূত্রে সম্পূর্ণ হওয়ার সেটিংস পাওয়ার কোনও উপায় কি?

উত্তর:


1

এটি করার জন্য আমি কোনও পদ্ধতি দেখতে পাচ্ছি না, সহজেই। আপনাকে complete -pপিতামাত্ত শেল থেকে শিশু শেলগুলিতে আউটপুট দিতে হবে ।

এটি শুরু করার জন্য আপনাকে সাব-শেলের অতিরিক্ত কমান্ডগুলি ইনজেক্ট করতে দেয়:

$ bash --rcfile <(echo '. ~/.bash_profile')

এখন আমরা যদি চেষ্টা করে দেখি এবং এর complete -pমতো করে:

$ bash --rcfile <(echo '. ~/.bash_profile'; while read line; do echo "$line"; done < <(complete -p))
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]

এটি প্রায়শই কাজ করে, মনে হচ্ছে যে completeকমান্ডগুলি আসছে তাতে তা বিভক্ত হয়ে পড়েছে the মধ্যবর্তী ব্যক্তি কোনও কাজ না করায় কোনও ফাইল ব্যবহার করার চেষ্টা করছেন:

$ complete -p > /tmp/cmp.txt; bash --rcfile <(echo '. ~/.bash_profile'; echo '. /tmp/cmp.txt')
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]

কেন এটি ব্যর্থ হচ্ছে তা দেখার চেষ্টা করা জিনিসগুলিতে সত্যিই অতিরিক্ত আলোর ঝলক দেয় না। এখানে আমি এর মাধ্যমে বাশ থেকে ভার্বোজ আউটপুট সক্ষম করছি -set -x:

$ bash
$ set -x

তারপরে আমরা দ্বিতীয়বার আগে তৈরি করা ফাইলটি উত্স করি:

$ . /tmp/cmp.txt
+ . /tmp/cmp.txt
++ complete -F _manila manila
++ complete -F _minimal
complete: usage: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
++ complete -F _command time
++ complete -F _command do
++ complete -o bashdefault -o default -o nospace -F __git_wrap_git_checkout gcob

সুতরাং কিছু চতুরতা না থাকলে, দেখে মনে হচ্ছে আউটপুটটির মধ্যে থাকা ডেটা complete -pএই বিশেষ ক্ষেত্রে বহনযোগ্য নয়।

তথ্যসূত্র


1

আপনি করা হবে না সব আপনার ~ / .bashrc মধ্যে সেটিংস, কিন্তু আপনি একটি "ওয়ান মাছ ধরার নৌকা" যদি দেখেন যে যোগ করতে পারিনি _behat_suitesফাংশন সংজ্ঞায়িত করা হয়েছে এবং সমাপ্তির ফাংশন আছে না সংজ্ঞায়িত করা হয়েছে; যদি তাই হয় তবে সম্পূর্ণতার সংজ্ঞা দিন।

পাঠযোগ্যতার জন্য এখানে এক-লাইনার কিছুটা ভাঙা হয়েছে:

declare -f _behat_suites          >/dev/null && 
  ! complete -p run_behat_suite   >/dev/null && 
      complete -F _behat_suites run_behat_suite
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.