সিডি কি কেবল ডিরেক্টরিটির নাম লিখে?


58

আমার হয় 20 বছর আগে কোথাও এটি ছিল বা আমি এটি সম্পর্কে স্বপ্ন দেখেছি।

মূলত:

টাইপ হলে blobblobআমি পাই
blobblob: command not found

যথেষ্ট ফর্সা।

আমি এটি চাই যাতে আমার শেলটি যখন এই ত্রুটিগুলি পেয়ে যায় - কমান্ডটি পাওয়া যায় নি - এটি সেই নামের ('ব্লুব্লব') দিয়ে কোনও ডিরেক্টরি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখায় cdযে এটি ডিরেক্টরিতে আছে কিনা ।

আমি নিশ্চিত যে এটি না করার বা সতর্কতার সাথে এটি না করার কিছু কারণ রয়েছে।
আমি কেবল মনে করি যদিও এটি বেশ ঝরঝরে হবে এবং আমি কোথাও (এখানে এখানে!) এটি সন্ধান করে এটি চেষ্টা করে দেখতে চাই।

কীন্ডা শেল প্রোগ্রামিংটি কীভাবে এটি করতে পারে তা আমার কোনও ধারণা নেই।

উত্তর:


76
  • ব্যাশ: shopt -s autocd
  • Zsh: setopt autocd
  • tcsh শেল: set implicitcd

এছাড়াও, 'অটোজাম্প' একটি দরকারী সরঞ্জাম। একবার ইনস্টল হয়ে গেলে এটি ডিরেক্টরিগুলি মনে রাখে যাতে আপনি j abc টাইপ করতে পারেন এবং আপনি যদি আগে abc দেখতে এসেছিলেন, x / d / f / g / t / abc বলুন তবে এটি সেখানে সিডি হবে!
https://github.com/joelthelion/autojump


1
হ্যাঁ, আমি shopt -s autocdএটি কমান্ড লাইনে টাইপ করেছি। এখন আমি কেবল ডিরেক্টরি নাম লিখতে শুরু করতে এবং স্বয়ংক্রিয়রূপে ব্যবহার করতে পারি এবং তারপরে ফিরে এবং শেলটিকে ডিরেক্টরিতে টিপতে পারি cd। খুবই ভাল !
মাইকেল ডুরান্ট

6
গ্রেট। এড়াতে কোনও অপব্যবহার নির্দেশ করার জন্য ধন্যবাদ।
ভোনব্র্যান্ড

3
আমি এটি ব্যবহার করি না - cdএটি টাইপ করা তেমন শক্ত নয় এবং আপনি যখন আরও প্রসঙ্গ উপস্থাপন করেন তখন বেশিরভাগ ট্যাব-সমাপ্তির পদ্ধতিগুলি স্মার্ট হয়।
jw013

অত্যধিক প্রশংসার উদ্রেককারী ব্যাকস্প্যাক করার পরে, আমি কেবল এটুকু বলতে পারি যে অটোকড সত্যই সঠিক উত্তর: ডি
লুক

autocdShopt ব্যাশ সংস্করণ 4. মধ্যে যোগ করা হয়েছিল সুতরাং এটি উপলব্ধ MacOS উপর (এখনও ব্যাশ সংস্করণ 3.xx রয়েছে) যদি না একটি বিকল্প, নতুন ব্যাশ ইনস্টল করা (যেমন, homebrew মাধ্যমে) হয়।
কুইন কমেন্ডেন্ট

2

Autojump উপযোগ একটি সবচেয়ে ব্যাপকভাবে ব্যবহৃত ডিরেক্টরির তালিকা সঙ্গে একটি অনুরূপ প্রক্রিয়া প্রদান করে। এটির জন্য, টাইপিংয়ের অতিরিক্ত সংযোজনীয় টেডিয়াম প্রয়োজন তবে এটি jSpaceপ্রায়শই না একবারে অনুমান করার মাধ্যমে ক্ষতিপূরণ দেওয়া হয়।

এটি আমি এখন পর্যন্ত ব্যবহার করেছি ডিডব্লিউআইএমের সবচেয়ে কাছের ।


1

আমি একবার অনুরূপ উদ্দেশ্যে একটি দরকারী স্ক্রিপ্ট তৈরি করেছি, ফাইন্ড -এন-সিডির জন্য একটি ফাংশন এফসিডি দিয়ে ।

আপনি টাইপ করুন fcd fooএবং 3 টি জিনিস ঘটতে পারে:

  • এরকম কোনও ডিরেক্টরি foo পাওয়া যায় নি, তারপরে এটি ফিরে আসে "no such directory " $1
  • একটি ফাইল পাওয়া যায়: এটি ডিরেক্টরি (বা কেবল একটি ফাইল) কিনা তা পরীক্ষা করে এবং যদি তাই হয় তবে এটি সেখানে সিডি করে।
  • একাধিক ফাইল পাওয়া যায় - তারপরে একটি নির্বাচন উপস্থাপন করা হয়, যেখানে আপনি কেবল নির্বাচনের সংখ্যা টাইপ করেন (বা প্রত্যাবর্তনের জন্য একটি বিশেষ সংখ্যা)।

এটি একই রকম যে এটি আপনাকে পুরো পাথটি টাইপ করার দরকার নেই, তবে আপনি স্পষ্টভাবে ফাংশনটি কল করেছেন।

#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo 
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd () 
{
    list=$(locate $1 | egrep "/$1$")
    count=$(echo $list | wc -w )
    case $count in 
      0) 
        echo "unknown directory: "$1 && return
        # could search for partial matches Doc => Documentation
        ;;
      1) 
        if [[ -d "$list" ]]; then
        echo "$list";
        cd "$list";
        else
            echo "not a directory: $1"
        fi
        ;;
      *) 
        select directory in $list "/exit/" 
        do
          if [[ "$directory" = "/exit/" ]]; then break; fi
          if [[ -d "$directory" ]]; then
                echo "$directory";
                cd "$directory";
            break
          else
            echo "not a directory: "$1 
          fi
        done     
        ;;
   esac
}

আপনাকে sourceফাংশনটি ( source fcd.sh| . fcd.sh) করতে হবে এবং এটিকে স্ক্রিপ্ট হিসাবে কল করতে পারবেন না, কারণ cdঅন্যথায় কেবল স্ক্রিপ্টের প্রসঙ্গেই ঘটবে এবং সমাপ্তির পরে আপনি তত্ক্ষণাত আপনার প্রারম্ভিক মন্দিরে ফিরে আসবেন।

যেহেতু এটির সাথে কাজ করে locate, ডিরেক্টরিগুলি অনুসন্ধানে এটি বেশ দ্রুত (তবে সর্বদা আপ টু ডেট নয়)।

এটি ডিরেক্টরিতে ফাঁকাভাবে নাম হিসাবে পরিচালনা করে না। সমস্যার সমাধানের যদি আপনার কাছে সমাধান থাকে তবে আমি খুশি হব।


1
প্রশ্নটি হ'ল cdস্বয়ংক্রিয়ভাবে, কোনও কমান্ড টাইপ না করে। এই উত্তরটি টার্মিনালে দ্রুত ডিরেক্টরি নেভিগেশনের জন্য আরও উপযুক্ত ।
manatwork

2
@ মান্যাটওয়ার্ক: আচ্ছা, আপনি বাশের ত্রুটি হ্যান্ডলারের সাথে কমান্ডটি একত্রিত করতে পারেন। ইন /etc/bash.bashrcসেখানে উবুন্টু হয়, একটি function command_not_found_handleযা যেমন যদি এটা পরিবর্তিত হতে পারে বলে মনে হচ্ছে।
ব্যবহারকারী অজানা

বুঝেছি এই উপায়টি আরও ভাল শোনাচ্ছে।
manatwork

@ মান্যাটওয়ার্ক: আমি নিজে এটি ব্যবহার করতে চাইলে আমি নিজেই এটি করব। তবে আমি ডিরেক্টরি পরিবর্তন করতে চাইলে আমি একটি শর্ট কমান্ড ব্যবহার করতে চাই তবে আমি যদি কিছু ভুল করে লিখি তবে খুব কমই আমি 3 বা 4 টি অক্ষর টাইপ করতে ভুলে গেছি। এই প্রোগ্রামে পদক্ষেপ নেওয়া আমার জন্য বরং বিরক্তিকর হবে, তবে এটি স্পষ্টভাবে ব্যবহার করা ভাল।
ব্যবহারকারী অজানা

1

এটিও কাজ করে,

cdf name_of_file_or_directory

.. আপনি শেল মধ্যে উত্সাহিত একটি কাস্টম cdf.sh স্ক্রিপ্ট (নীচে) সেট আপ করুন যে। প্যারামিটার হিসাবে একটি ডিরেক্টরিতে, এই স্ক্রিপ্টটি কেবল পাওয়া ডিরেক্টরিটির জন্য মূল ডিরেক্টরিতে চলে আসে। আপনার .bashrc বা .zshrc এ নিম্নলিখিত লাইন যুক্ত করুন, যাই হোক না কেন ..

source ~/bin/cdf.sh 

এবং এই কোডটি ~ / bin / cdf.sh ফাইলটিতে যুক্ত করুন যা আপনাকে স্ক্র্যাচ থেকে তৈরি করতে হবে।

#!/bin/bash

function cdf() {
    THEFILE=$1
    echo "cd into directory of ${THEFILE}"
    # For Mac, replace find with mdfind to get it a lot faster. And it does not need args ". -name" part.
    THEDIR=$(find . -name ${THEFILE} |head -1 |grep -Eo "/[ /._A-Za-z0-9\-]+/")
    cd ${THEDIR}
}

একটি পুরানো প্রশ্নের দুর্দান্ত উত্তর। আমি বিশ্বাস করি আপনি একটি পুরানো প্রশ্ন পুনরুদ্ধারের জন্য একটি ব্যাজ পাবেন এবং ইউ ও এলএসই
তে

0

এটি আপনার মধ্যে রাখুন ~/.bashrc

  #aliases to cd into the core dirs
  PROJECT_PARENT_DIRS[0]="$HOME/repos"
  #you can make it search more dirs by assigning new indexes to your other root dirs

  for PARENT_DIR in ${PROJECT_PARENT_DIRS[@]} ; do
    if [ -d "$PARENT_DIR" ]; then
      for PROJECT_DIR in $(/bin/ls $PARENT_DIR); do
        if [ ! -z `which $PROJECT_DIR` ]; then
          continue # don't set alias if there is something already a command on the path with the same name
        fi
        if [ -d "$PARENT_DIR/$PROJECT_DIR" ]; then
          alias "$PROJECT_DIR"="cd $PARENT_DIR/$PROJECT_DIR"
        fi
      done
    fi
  done
  #end alias
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.