ডিরেক্টরি নামের একটি পরিবেশের ভেরিয়েবলের জন্য স্বতঃপূরণ বাশ


10

আমি লিনাক্স মিন্ট 14-এ অন্যান্য জিনিসগুলির মধ্যে 4.2.37 বাশ ব্যবহার করছি।

যখন আমি টাইপ করে পরিবেশের পরিবর্তনশীলের নামটি স্বতঃসিদ্ধ করি Tab, তখন এটি স্থানের পরে পরিবর্তকের পরিবর্তে প্রসারিত হয়।

যদি ভেরিয়েবলের মানটি একটি ডিরেক্টরি নাম হিসাবে ঘটে থাকে তবে আমি এটির পরে চলকের নামটি প্রসারিত করতে চাই /

উদাহরণস্বরূপ, যদি আমি টাইপ করি:

$ ls $HOM<tab>

এটি প্রসারিত:

$ ls $HOME _

যেখানে _কার্সারের অবস্থান চিহ্নিত করে। সমস্যাটি হ'ল আমি তখন সাধারণত আমার হোম ডিরেক্টরিতে কোনও ফাইল বা ডিরেক্টরিতে নাম লিখতে চাই, যার অর্থ আমাকে টাইপ করতে হবে backspaceএবং তারপরে /

তাই আমি চাই উপরে প্রসারিত করুন:

$ ls $HOME/_

আমি সম্পূর্ণ ভেরিয়েবলের নাম টাইপ করলে একই জিনিস ঘটে থাকে; পরে ls $HOME, tabএকটি স্থান যুক্ত করে, এবং আমি এটি একটি যুক্ত করতে চাই /

(এবং অবশ্যই আমি /ভেরিয়েবলের মান ডিরেক্টরি নাম না হলে এটি যুক্ত করতে চাই না))

বাশ কমান্ডের মাধ্যমে বা আমার আপডেট করে আমার পছন্দ মতো আচরণ করার জন্য আমি বলার কোনও উপায় থাকতে পারি $HOME/.inputrc?

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

(আমি /etc/profile.d/bash_completion.shআমার সিস্টেমে অক্ষম হয়েছি কারণ এটির সাথে খারাপভাবে ইন্টারঅ্যাক্ট করে set -o nounset। একটি দ্রুত পরীক্ষা নির্দেশ করে যে এটি সম্ভবত আমার প্রশ্নের সাথে প্রাসঙ্গিক নয়))

ঘটনাচক্রে, tcsh এটি করে: একটি পরিবেশের পরিবর্তনশীল প্রদত্ত $FOOBAR, টাইপিং যদি এটি ডিরেক্টরিকে নির্দেশ করে তবে $FOOBA<tab>প্রসারিত হয় (একটি স্থান সহ) যদি তা না করে। না, আমাকে টিসিএস-এ ফিরে যেতে প্ররোচিত করার পক্ষে এটি যথেষ্ট নয়। zsh পাশাপাশি এটি করে।$FOOBAR/$FOOBAR


+1 আপনি যদি দুঃসাহসী বোধ করেন তবে কোডটি এখানে
l0b0

@ l0b0: (ক) আমার কাছে এটি ইতিমধ্যে আছে। (খ) আমি বোধ করছি বেশ যে দু: সাহসিক। (গ) এটি প্রোগ্রামেবল সমাপ্তি বলে মনে হচ্ছে ।
কিথ থম্পসন

উত্তর:


6

এই বৈশিষ্ট্যটি 2014-02-26 এ প্রকাশিত 4.4 বাশ এ প্রয়োগ করা হয়েছে।

NEWSফাইলটি উদ্ধৃত করা হচ্ছে (এর শীর্ষ স্তরের অন্তর্ভুক্ত bash-4.3.tar.gz, জিপিজি স্বাক্ষরটিও দেখুন ):

শব্দটি সম্পূর্ণ করার কোডটি শেল ভেরিয়েবলযুক্ত একটি ফাইলের নাম ডিরেক্টরি নামের ক্ষেত্রে প্রসারিত হয় এবং /যথাযথভাবে শব্দের সাথে যুক্ত হয় কিনা তা পরীক্ষা করে । কমান্ড সমাপ্তি সম্পাদন করার সময় একই কোড কমান্ড নামে শেল ভেরিয়েবল প্রসারিত করে expand

উত্স থেকে নির্মিত একটি অনুলিপি সহ একটি দ্রুত পরীক্ষা দেখায় যে আমি যদি টাইপ করি

$ ls $HOM<tab>

এটি এখন প্রসারিত হয়

$ ls $HOME/

(ঘটনাচক্রে, zsh এটিও করে।)


1
এর জন্য ম্যানুয়ালি বাশ ইনস্টল করতে হয়েছিল। 4.3 ফেডোরা 20 টি দোকানে নেই।
জোজকিয়াক্ক

5
shopt -s direxpand

সাহায্য করবে, কোনও স্থান থাকবে না যাতে আপনি টাইপ করা চালিয়ে যেতে পারেন তবে এটি পরিবেশের ভেরিয়েবলটিকে এর সামগ্রীর সাথে প্রতিস্থাপন করবে।

Alsp /programming/6418493/bash-variable-expansion-on-tab-complete দেখুন

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