প্রতীকী লিঙ্কের জন্য ওরফে সমান?


18

আমি নিজেকে প্রায়শই আমার বাড়ির ফোল্ডারে কয়েকটি ডিরেক্টরি ঘুরে দেখি এবং সেগুলি লিখতে ক্লান্ত হয়ে পড়েছি। আমি একটি দ্রুত পদ্ধতির চাই, যা traditionতিহ্যগতভাবে একটি প্রতীকী লিঙ্ক হবে।

তবে, আমি কয়েক ডজন প্রতীকী লিঙ্ক সহ আমার হোম ডিরেক্টরিতে বিশৃঙ্খলা করতে চাই না। আমি কিছু ~/links/ডিরেক্টরি তৈরি করতে এবং এটি প্রতীকী লিঙ্কগুলির সাথে বিশৃঙ্খলা করতে পারতাম , তবে এটি এখনও কুৎসিত। এছাড়াও, আমি প্রতীকী লিঙ্কগুলি তৈরি করতে চাই যা প্রতিটি দিন পরিবর্তিত হয় (.bashrc এ সংজ্ঞায়িত) বর্তমান দিন ডিরেক্টরিতে ঝাঁপিয়ে পড়ে।

প্রতীকী লিঙ্কটি কার্যকরভাবে ব্যবহার করার কোনও উপায় আছে কি তাড়াতাড়ি নেভিগেশনের জন্য একটি লিঙ্ক হিসাবে স্বীকৃত এমন কিছু তৈরি করে, তবে আমি যখন lsআমার হোম ডিরেক্টরিটি করে থাকি তখন তা উপস্থিত হয় না এবং বর্তমান অধিবেশন পেরিয়ে যায় না?


4
আপনি পুশড এবং পপডে নজর রাখতে চাইতে পারেন
রুই এফ রিবেইরো

এই সঠিক প্রয়োজনের জন্য আমি জেরোইন জ্যানসেনের দৃষ্টিভঙ্গিটিকে অভিযোজ্য এবং স্বল্প-ব্যয়বহুল বলে মনে করি: jeroenjanssens.com/2013/08/16/…
থিওফ্রাস্টাস

2
আপনি কোন শেল ব্যবহার করছেন?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ থিওফ্রাস্টাস হেহ - এটিই মূলত আমার উত্তরে যথাযথভাবে বর্ণিত হয়নি le
ম্যাচটিএম

3
ঠিক আপনি যা সন্ধান করছেন তা নয়, তবে দু'জন পরিচালক পরিচালকের মাঝে পিছনে ঝাঁপিয়ে পড়লে এখনও কার্যকর হতে পারে: শেষ ডিরেক্টরিতে cd -উইল cdআগে ছিল। অতএব, আপনি যদি এটির দু'বার করেন তবে আপনি যেখানে শুরু করেছিলেন সেখানে ফিরে যাবেন ... পরিস্থিতিটির জন্য খুব সুন্দর "ওহ আমি পূর্ববর্তী স্থানে কিছু ফাইলে. টেক্সট সম্পাদনা করতে ভুলে গেছি" => সহজভাবে cd -:, কিছু cd -
ফাইল

উত্তর:


12

আপনি ট্যাব সমাপ্তি ব্যবহার করতে পারেন। অনেকগুলি লিনাক্স ডিস্ট্রিবিউশনে ডিফল্টরূপে, ব্যাশ সেট আপ করা হয় যাতে আপনি যখন [টিএবি] কী টিপে যান, তখন আপনাকে সম্ভাব্য ম্যাচের একটি তালিকা দেওয়া হয়েছে, বা যদি কেবল একটি ম্যাচ থাকে, সমস্ত কিছু পূরণ হয়ে যায়। সিডির জন্য, এটি সাধারণত বর্তমান ওয়ার্কিং ডিরেক্টরিটির উপ-ডিরেক্টরিগুলির একটি তালিকা। আপনি এটি ওভাররাইট করতে পারেন, তবে আমি পরিবর্তে একটি উপনাম তৈরির পরামর্শ দিচ্ছি, যেমন jd"লাফ ডিরেক্টরি" এর মতো:

alias jd=cd

এবং তারপরে, "বুকমার্কস" সংজ্ঞায়িত করে আপনি জেডি এর সম্পূর্ণতা হিসাবে চান। আরও অনেক বিকল্পের জন্য বাশ ম্যান পৃষ্ঠাটি দেখুন (কমান্ড বা ফাংশন থেকে ফ্লাইয়ের ফলাফলগুলি স্বয়ংক্রিয়ভাবে উত্পন্ন করা সহ) তবে সবচেয়ে সহজ উপায় হ'ল শব্দের একটি তালিকা, সাথে -W:

সম্পূর্ণ-ডাব্লু "/ এসআরভি / www ~ / টিএমপি ~ / কাজ" জেডি

এখন, jd[টিএবি] টাইপ করে হিট করুন এবং আপনি আপনার "বুকমার্কস" দেখতে পাবেন। যে কোনও অস্পষ্ট অংশ টাইপ করুন এবং তারপরে সম্পূর্ণ করতে [টিএবি] টিপুন। (উপরের দিকে, ~এসগুলি আমার হোম ডিরেক্টরিতে প্রসারিত করুন, সুতরাং প্রথম [টিএবি] আমাকে একটি দেয় /, এবং আমি যদি আঘাত করি wএবং [টিএবি] আবার /srv/wwwপূরণ করি তবে তা পূরণ করা হবে))

অবশ্যই, ~/.bash_profileএটি চালিয়ে যাওয়ার জন্য এটি এ দিন।

অথবা, আমরা এটি পরবর্তী স্তরে নিয়ে যেতে পারি। একটি ডিরেক্টরি তৈরি করুন ~/.shortcuts- একটি বিন্দু দিয়ে শুরু করে, এটি লুকানো থাকবে এবং আপনার দুর্দান্ত পরিষ্কার হোম ডিরেক্টরিটি গাঁটছড়া করবে না - এবং এটি আপনার পছন্দসই ডিরেক্টরিতে সিমলিঙ্কগুলি দিয়ে পূরণ করুন। তারপর, করা এই আপনার ~ / .bash_profile:

_list_shortcuts() 
{ 
    COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
    cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd

এটি _list_shortcutsনামের তালিকা তৈরি করতে ফ্যাকশনে কিছুটা জটিল সমাপ্তি সংজ্ঞায়িত করে এবং jdএকটি সরল নামের পরিবর্তে একটি ফাংশন হয়ে যায়, যেহেতু আমরা চাই যে এটি ন্যায়বিচারের চেয়ে আলাদাভাবে কাজ করা হোক cd-Pপতাকা cdতোলে symlinks সমাধান, তাই সবকিছু স্বচ্ছ জাদু হয়ে যায়। আপনার শর্টকাট নামগুলি এমনকি লক্ষ্যগুলির সাথে মেলে না।

তাই:

$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm  8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work

এবং, অভিনব কোনও অতিরিক্ত ডোজ জন্য, jdকোনও পরামিতি ছাড়াই কার্যকর করা হলে আপনার সমস্ত শর্টকাটগুলির তালিকা তৈরি করুন:

jd()
{
    if [[ -z "$1" ]]; then
      (cd ~/.shortcuts; stat -c '%N' *)
    else
      cd -P ~/.shortcuts/$1
    fi
}

দ্রষ্টব্য: আমি এর compgen -W $( cmd )পরিবর্তে ব্যবহার করি compgen -C 'cmd'কারণ উত্তরোত্তর কখনই আমার পক্ষে কাজ করে না এবং কেন তা আমি বুঝতে পারি না। এটি আমার নিজের একটি নতুন প্রশ্ন হতে পারে। :)


অনেক আগ্রহব্যাঞ্জক. একটি ধরা পড়ার পরেও, জেডি দিয়ে সম্পূর্ণ করার আগে এটির পুরো লিঙ্কটি লিখতে হবে, বা কমপক্ষে লিঙ্কের যথেষ্ট পরিমাণে দ্ব্যর্থহীন হয়ে উঠতে হবে। তাদের সংক্ষিপ্ত করার জন্য jd কমান্ডগুলিতে এলিয়াস যুক্ত করার কোনও উপায়? বা এগুলিকে এমন একটি ডিরেক্টরিতে আপেক্ষিক করে তুলুন যেখানে আমি মনে করি প্রতীকী লিঙ্কগুলি সঞ্চয় করতে পারি।
dsollen

@dollen আপডেট দেখুন :)
mattdm

এটি পুরোপুরি কাজ করেছে। সমস্ত সততার সাথে আমি এই প্রশ্নের ভাল উত্তর আশা করিনি, তবে এটি আমি যা চেয়েছিলাম ঠিক তা ঠিক। আমি এটির বেশ খানিকটা ব্যবহারের প্রত্যাশা করছি এবং যখনই আমি নতুন ভিএম পেয়েছি (আমি নিজের মানক পরিবেশগত পরিবর্তনগুলি একটি নতুন ভিএম লোলে ক্লোন করার একটি স্বয়ংক্রিয় উপায় আছে) আমি যখনই নতুন ভিএম পাই তখন আমার যে সংশোধন করা হয় তার তালিকায় যুক্ত করার পক্ষে এটি যথেষ্ট পরিষ্কার বলে মনে হয়। অনেক ধন্যবাদ. এমন কিছু সময় যখন আমার আরও ফ্রি সময় থাকবে তখন আমি বুঝতে পারি যে সম্পূর্ণের সিনট্যাক্সটি কীভাবে কাজ করে;)
dsollen

18

শেল এলিয়াসগুলির বৈশিষ্ট্য রয়েছে যা আপনি (কিছু) নাম-সমাপ্তি (সাধারণত আবদ্ধ tab) করতে পারেন। বিকল্পভাবে, আপনি CDPATHবৈশিষ্ট্যটি ব্যবহার করতে পারেন , যা "সাম্প্রতিক" (বিগত 5-6 বছরের মধ্যে) নাম-সম্পূর্ণকরণ সমর্থন করার জন্য উন্নত করা হয়েছে। যদি এটি আপনার পক্ষে কাজ করে তবে এর সুবিধা রয়েছে যে আপনি যা টাইপ করেন তা হ'ল ডিরেক্টরিটির প্রকৃত নাম এটির জন্য স্মৃতিচারণ না করে।

বাশ ম্যানুয়াল অনুসারে

CDPATH
cdবিল্টিন কমান্ডের জন্য অনুসন্ধান পথ হিসাবে ব্যবহৃত ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা ।

আরও পড়া:


CDPATHপরিবেশের পরিবর্তনশীল সম্পর্কে জানতেন না , আপনাকে ধন্যবাদ। আমি সেই git_reposডিরেক্টরিতে আমার ডিরেক্টরি যুক্ত করতে পারি ....
ওয়াইল্ডকার্ড

16

আপনি প্রায়শই যে ডিরেক্টরিগুলি ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন পরিবর্তন করেন না, তার জন্য অন্য বিকল্পটি হ'ল aliasআপনার .bashrcফাইলে বেশ কয়েকটি কমান্ড থাকা :

alias cdo="cd /u01/app/oracle"
alias cdw="cd /var/www/html" 

বন্ধুর প্রায় 50 টি থাকে; আমার এক মুঠো আছে; দ্রুত এবং সহজ মাত্র

cdo

ডিরেক্টরিটি / u01 / অ্যাপ / ওরাকলে পরিবর্তন করতে to


প্রকৃতপক্ষে. 1990 এর দশকের গোড়া থেকে আমি এই প্রক্রিয়াটি ব্যবহার করেছি।
wallyk

7

আমি সুপারিশ pushdএবং popd

আমি যখন ব্যক্তিগত কাজগুলি একাধিক ডিরেক্টরি জড়িত তখন বিকাশ কাজ / উত্স কোড পড়ার সময় ব্যক্তিগতভাবে তাদের সন্ধান করি।

তারা কার্যকরভাবে একটি স্ট্যাক কাঠামো / LIFO বাস্তবায়ন করে, যেখানে আপনি একটি ডিরেক্টরি ( pushd) চাপান এবং পরবর্তী পিওপি ডিরেক্টরি কমান্ড ( popd) এটি পুনরুদ্ধার করে।

সুতরাং, যখন কোনও দিরের ভিতরে থাকবেন, আপনি যা করবেন:

pushd .

এবং যখন আপনার এটি পুনরুদ্ধার করা দরকার তখন আপনি তা করেন

popd

আপনি ডিরেক্টরিতে ফিরে যেতে একাধিক pushd(গুলি) সম্পাদন করতে পারেন এবং সংশ্লিষ্ট popd(গুলি) পরে করতে পারেন।

আমি এখানে একটি লিঙ্ক ছেড়ে যাব।

http://www.eriwen.com/bash/pushd-and-popd/


1
এই সমাধানটি আমিও ব্যবহার করি, ব্যতীত যে আমি popdবেশি ব্যবহার করি না । আমি আমার dirsতালিকাটি (যা pushdকমান্ড দ্বারা জনবহুল ) আমি যে সমস্ত ডিরেক্টরি দেখতে চাই / সময়ের মধ্যে অংশ নিতে চাইছি তা পূরণ করে , তারপরে আমি চালিত করি pushd +1। তারপরে, আমি ডিরেক্টরিগুলি একটি সাধারণ দিয়ে চক্র করতে পারি !puযা খুব দ্রুত। (নোট উভয় উবুন্টু এবং সেন্টওএস উপর, pushdহয় শুধুমাত্র উপলব্ধ একটি পরিষ্কার সঙ্গে যে শুরু ইনস্টল উপর আদেশ pu।)
ওয়াইল্ডকার্ড

3

আপনি এগুলিকে আপনার ভেরিয়েবল হিসাবে রেখে দিতে পারেন ~/.bashrcএবং তারপরে সেগুলি কেবলমাত্র $দূরে।

$ cat ~/.bashrc
if [ "$PS1" ]
then
    export myproj=~/todays/fancy/project
fi

$ cd $myproj

3

সুস্পষ্ট উত্তরটি হল ভেরিয়েবল , শেলের সেই প্রতীকী জিনিসগুলি যা অন্যান্য জিনিসের জন্য দাঁড়িয়ে থাকে, একইভাবে ফাইল সিস্টেমে প্রতীকী লিঙ্কগুলিতে।

path/to/project $ project=$PWD
path/to/project $ cd $elsewhere   # Previously created
path/to/elsewhere $ cd $project
path/to/project $ logout          # Variables gone, as required

যে কোনও শেল্ট শেল এ, আপনি Tabভেরিয়েবলের নামগুলি সম্পূর্ণ করতে পারেন যা আরও সাহায্য করে।

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