আমাদের সিডি-র আরও ইতিহাস আছে?


42

cd -সর্বশেষ পরিদর্শন করা ডিরেক্টরিতে যেতে পারেন can আমরা কি শেষটি বাদে আরও ইতিহাস ঘুরে দেখতে পারি?


উত্তর:


31

আপনি যে আদেশটি সন্ধান করছেন তা হ'ল pushdএবং popd

আপনি এখানেpushd এবং popdথেকে একটি বাস্তব কাজের উদাহরণ দেখতে পারেন ।

mkdir /tmp/dir1
mkdir /tmp/dir2
mkdir /tmp/dir3
mkdir /tmp/dir4

cd /tmp/dir1
pushd .

cd /tmp/dir2
pushd .

cd /tmp/dir3
pushd .

cd /tmp/dir4
pushd .

dirs
/tmp/dir4 /tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1

1
এছাড়াও আছে $OLDPWDআপনি আগে পিছে একই কমান্ড ব্যবহার করে দুই ডিরেক্টরি মধ্যে টুসকি করতে চান ক্ষেত্রে, কিন্তু আমি নিশ্চিত না কিভাবে শেল-নির্দিষ্ট ও বন্টন / কার্নেল-নির্দিষ্ট এই হল আছি।
mechalynx

4
@ivy_lynx OLDPWDসব POSIX শাঁস বিদ্যমান, কিন্তু এই প্রশ্ন যা কিভাবে যে অতিক্রম করার (প্রশ্ন ইতিমধ্যে উল্লেখ জিজ্ঞেস জন্য অকাজের cd -, যার জন্য একটি শর্টকাট cd "$OLDPWD")।
গিলস 23'18

2
আপনি ন্যায়বিচারের cd /tmp/dir1; pushd . পরিবর্তে ব্যবহার করার কোনও কারণ আছে কি pushd /tmp/dir1?
GnP

@gnp, কোনও নির্দিষ্ট কারণ নেই। এটি উত্তরে আমি যে লিঙ্কটি উল্লেখ করেছি তা থেকে নেওয়া হয়েছিল। pushd /tmp/dir1ঠিক কাজ করা উচিত।
রমেশ

1
ঠিক আছে, আমার কৌতূহলটি বেছে নিয়েছে। আমি আপনার উত্তরটি ব্যবহার করে প্রকৃত উদাহরণ দিয়ে উন্নত করার পরামর্শ দিয়েছি pushdএবং popdডিরেক্টরি ডিরেক্টরিটিকে পিছনে পিছনে যেতে চাই। আপনার উত্তর ইতিমধ্যে সঠিক উত্তর।
GnP

53

আপনি কোন শেলটি ব্যবহার করছেন তা আপনি নির্দিষ্ট করেননি, তাই এটি zsh এর বিজ্ঞাপনের বাহানা দেওয়া হোক।

হ্যাঁ, আমাদের জন্য আরও ইতিহাস cdরয়েছে cd -2, cd -4ইত্যাদি Very খুব সুবিধাজনক cd -TAB, বিশেষত সম্পূর্ণকরণ সিস্টেম এবং রঙগুলি সক্ষম করে:

আমার কাছে .zshrc এ এটি রয়েছে:

setopt AUTO_PUSHD                  # pushes the old directory onto the stack
setopt PUSHD_MINUS                 # exchange the meanings of '+' and '-'
setopt CDABLE_VARS                 # expand the expression (allows 'cd -2/tmp')
autoload -U compinit && compinit   # load + start completion
zstyle ':completion:*:directory-stack' list-colors '=(#b) #([0-9]#)*( *)==95=38;5;12'

এবং ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


4
bash bash bash bash
টিম

7
ঠিক আছে, আমি এই উত্তরটি মুছব না, সম্ভবত অন্যদের জন্য কার্যকর হবে।
জিম্মিজ

23
প্রশ্নটি বিশেষভাবে জিজ্ঞাসা না করা অবধি bashএটি একটি বৈধ উত্তর। এটি অপসারণ করবেন না।
লাইওরি

ওপি যদি কেবলমাত্র বাশকে অন্তর্ভুক্ত করতে তার প্রশ্ন সম্পাদনা করে তবে কী এই উত্তরটি কার্যকর হবে?
ওকার

3
এটি উল্লেখ করা যেতে পারে যে ব্যতীত setopt AUTO_PUSHD, উপরের সেটআপগুলির কোনওটিকেই স্টক zsh এ সম্পূর্ণ হওয়ার সাথে সর্বব্যাপী ডিরেক্টরি স্ট্যাকের প্রয়োজন নেই । এবং (স্বাদের বিষয়) PUSHD_MINUSএর অনুভূতিটি বিপরীত করে , ডিরেক্টরি স্ট্যাকের সাথে অপ্রাসঙ্গিক এবং এখানে প্রদত্ত অনুরোধটি কেবল ডিরেক্টরি স্ট্যাকের সমাপ্তির আউটপুটে রঙিন যোগ করে। একটি অবশ্যই সম্পূর্ণতা সাবসিস্টেমটি দিয়ে শুরু করতে হবে । cd +cd -CDABLE_VARSzstyleautoload -U compinit && compinit
wjv

13

"আরও ইতিহাস" সম্পর্কিত আপনার প্রশ্নের উত্তর দিতে। cd -বাশের কোনও বৈশিষ্ট্যই কেবলমাত্র একটি একক ডিরেক্টরিকে সমর্থন করে না যেখানে আপনি "ফ্লিপ" করতে পারেন। @ রমেশ তার উত্তরে বলেছে। আপনি যদি ডিরেক্টরিগুলির দীর্ঘতর ইতিহাস চান তবে আপনি ব্যবহার করতে পারেন pushdএবং popdডিরেক্টরিটি সংরক্ষণ করতে পারেন বা আগেরটিতে ফিরে যেতে পারেন।

dirsকমান্ডের সাহায্যে স্ট্যাকের মধ্যে বর্তমানে কী রয়েছে তার তালিকাটিও দেখতে পাবেন ।

এই উত্তর শিরোনাম থেকে একটি বিশদ ব্যাখ্যা পাওয়া যাবে: আমি কীভাবে পুশড এবং পপড কমান্ড ব্যবহার করব?


আমি আপনার উত্তর থেকে একটি রেফারেন্স অন্তর্ভুক্ত করেছি। আশা করি কিছু মনে করবেন না। :)
রমেশ ২

@ রমেশ - নাহ এগিয়ে যান।
slm

8

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

মূলত, এটি একটি ডেমন যা আপনার সমস্ত শেল থেকে ডিরেক্টরি পরিবর্তনগুলি সংগ্রহ করে এবং একটি সিডিকে প্রোগ্রাম যা ইতিহাস প্রদর্শন করে এবং আপনাকে কোনও ডিরেক্টরি বাছাই করতে দেয় (যাতে আপনি কোনও স্ট্যাকের মধ্যে সীমাবদ্ধ নন)।


7

আপনার যতটা ইতিহাস রয়েছে ততটুকু রয়েছে:

cd() {
[ "$((${DIRSTACKMAX##*[!0-9]*}0/10))" -gt 0 ] &&
        set -- "$@" "$DIRSTACK"               &&
        DIRSTACK='pwd -P >&3; command cd'     ||
        { command cd "$@"; return; }
_q()    while   case "$1" in (*\'*) :   ;;      (*)
                ! DIRSTACK="$DIRSTACK '$2$1'"   ;;esac
        do      set -- "${1#*\'}" "$2${1%%\'*}'\''"
        done
while   [ "$#" -gt 1 ]
do      case    ${1:---} in (-|[!-]*|-*[!0-9]*) : ;;
        (*)     eval "  set $((${1#-}+1))"' "${'"$#}\""
                eval '  set -- "$2"'" $2"'
                        set -- "${'"$1"'}" "$1"'
        ;;esac; _q "$1"; shift
done
eval "  DIRSTACK=; $DIRSTACK    &&"'
        _q "$OLDPWD"            &&
        DIRSTACK=$DIRSTACK\ $1
        set "$?" "${DIRSTACK:=$1}"'" $1
"       3>/dev/null
[ "$(($#-1))" -gt "$DIRSTACKMAX" ] &&
        DIRSTACK="${DIRSTACK% \'/*}"
unset -f _q; return "$1"
}

এটি একটি শেল ফাংশন যা zshস্টাইল cdইতিহাসের প্রস্তাব দেওয়ার জন্য কোনও পসিক্স সুসংগত শেল সক্ষম করে । এটি একটি একক সাবশেলকে আমন্ত্রণ না করেই এর সমস্ত কাজ করে এবং আমি বিশ্বাস করি যে এর প্রবাহটি বেশ সুন্দর - এটি মাঝারি পরীক্ষার অধীনে সমস্ত ক্ষেত্রে সঠিকভাবে পরিচালনা করবে বলে মনে হয়।

ফাংশনটি পুরোপুরি পোর্টেবল সিনট্যাক্সের উপর নির্ভর করার সাথে সাথে তার পরিবেশের সাথে যত সুন্দরভাবে খেলার চেষ্টা করেছে - এটি কেবল একটি অনুমান করে এবং এটি হ'ল $DIRSTACKপরিবেশের পরিবর্তনশীল এটি যেমন ইচ্ছা তেমন করার সম্পত্তি।

এটি সমস্ত পাথকে এটি $DIRSTACKএকক উদ্ধৃতিতে সংরক্ষণ করে এবং এটির ক্রমিকায়িত করে - যদিও এটি নিশ্চিত করে যে প্রতিটিটি নিরাপদে উদ্ধৃতিযুক্ত এবং ক্রিয়াকলাপের মানটিতে যোগ করার আগে ক্রমিক করা হয়েছে এবং কোনও প্রকারের বিশেষ চরিত্রের সাথে কোনও সমস্যা নেই should । যদি $DIRSTACKMAXপরিবেশের পরিবর্তনশীলটি সেট করা থাকে তবে এটি ইতিহাসে এটি ধরে রাখার সংখ্যার জন্য উপরের সীমা হিসাবে এটি ব্যবহার করবে, অন্যথায় সীমাটি এক।

আপনি যদি ফাংশনটি cdসাধারণ হিসাবে লোড করেন তবে cd -[num]আপনার পরিবর্তনের ডিরেক্টরি ইতিহাসের মাধ্যমে ফিরে সরিয়ে নেওয়ার পক্ষেও সক্ষম হবেন ।

ফাংশনের প্রাথমিক প্রক্রিয়াটি cdনিজেই - এবং ${OLD,}PWDপরিবেশের ভেরিয়েবল। পসিক্স নির্দিষ্ট করে যে cdপ্রতিটি পাথ চলার জন্য এগুলি পরিবর্তন করে - এবং তাই এটি কেবল শেলের বিল্টিন ভেরিয়েবলগুলি ব্যবহার করে এবং যতক্ষণ আপনার পছন্দ মতো মানগুলি সংরক্ষণ করে।


@ ডাড ইউজার - আমি জানতাম কারও কাছে একটি ডেটা ছিল। আপনি বেশ স্বাগত
মাইকসার্ভ

4

Acd_func.sh স্ক্রিপ্ট ঠিক করে কি আপনি বর্ণনা করে। মূলত এটি cdফাংশনটি ওভারলোড করে এবং cd --পূর্বে পরিদর্শন করা ডিরেক্টরিগুলির একটি তালিকা পেতে টাইপ করতে সক্ষম করে , যা থেকে আপনি সংখ্যা অনুসারে নির্বাচন করতে পারেন। এগুলি ছাড়া বাশ ব্যবহার করা আমার পক্ষে খুব শক্ত find এবং আমি এটি একটি নতুন সিস্টেমে ইনস্টল করা প্রথম জিনিস।



3

অন্যরা ইতিমধ্যে কিছু আকর্ষণীয় সমাধান coveredেকে রেখেছে। কিছু সময় আগে আমি একটি সম্পর্কিত সমস্যার নিজস্ব সমাধান তৈরি করেছি যা দ্রুত "সরাসরি ইতিহাস" করার জন্য পরিবর্তন করা যেতে পারে। আমি মূলত কয়েকটি সাধারণভাবে ব্যবহৃত ডিরেক্টরিগুলি "লেবেল" করতে চেয়েছিলাম এবং সমস্ত খোলা শেলগুলি সেগুলি দেখতে এবং তাদের পুনরায় বুটের মধ্যে স্থির রাখতে চেয়েছিল ।

#dir_labels
#functions to load and retrieve list of dir aliases

function goto_complete {
    unset dir_labels
    declare -A dir_labels
    {
    while read line; do
        ll_pre="${line%% *}"
        ll_dir="${line#* }"
        dir_labels["$ll_pre"]="$ll_dir"
    done
    } < ~/.dir_labels
    unset ll_pre
    unset ll_dir

    local cur possib
    cur="${COMP_WORDS[COMP_CWORD]}"
    possib="${!dir_labels[@]}"
    COMPREPLY=( $(compgen -W "${possib}" -- ${cur}) )
}

complete -F goto_complete goto

function goto {
    unset dir_labels
    declare -A dir_labels
    {
    while read line; do
        ll_pre="${line%% *}"
        ll_dir="${line#* }"
        dir_labels["$ll_pre"]="$ll_dir"
    done
    } < ~/.dir_labels
    unset ll_pre
    unset ll_dir

    if [ $# -gt 0 ]; then
    key="$1"
    else
    key=default
    fi
    target="${dir_labels[$key]}"
    if [ -d "$target" ]; then
    cd "$target"
    echo "goto $key: '$target'"
    else
    echo "directory '$target' does not exist"
    fi
}

function label {
    unset dir_labels
    declare -A dir_labels
    {
    while read line; do
        ll_pre="${line%% *}"
        ll_dir="${line#* }"
        dir_labels["$ll_pre"]="$ll_dir"
    done
    } < ~/.dir_labels
    unset ll_pre
    unset ll_dir

    if [ $# -gt 0 ]; then
    target="$1"
    else
    target="default"
    fi
    dir_labels["$target"]=$PWD
    for i in "${!dir_labels[@]}"; do
    echo "$i ${dir_labels[$i]}"
    done > ~/.dir_labels
}

মূলত আমি শুধু করতে চাই label fooবর্তমান ডিরেক্টরী ডাকতে fooতারপর যাই হোক না কেন শেল থেকে, এবং goto foowhould cdসরাসরি নেই। খালি যুক্তি: এর labelজন্য একটি ডিফল্ট লক্ষ্য তৈরি করবে goto

আমি উপকরণের স্বয়ংক্রিয় অপসারণ বাস্তবায়ন করতে বিরক্ত করি না, তবে অন্যথায়, আমি এখনও এটি কিছুটা পরিবর্তিত আকারে ব্যবহার করছি।


2

আপনি http://fex.belwue.de/fstools/bash.html থেকে আমার "সিডি ইতিহাস" ফাংশনটি ব্যবহার করতে পারেন

এটি আপনি যেখানে ছিলেন সেখানে প্রতিটি ডিরেক্টরি মনে রাখে এবং "সিডিএইচ" দিয়ে আপনি শেষ 9 ডিরেক্টরিগুলির একটি তালিকা দেখতে পাবেন। কেবল সংখ্যাটি প্রবেশ করান এবং আপনি এই ডিরেক্টরিতে ফিরে এসেছেন।

উদাহরণ:

framstag @ wupp: /: cd
1: / usr / স্থানীয় / বিন
2: / var
3: /
4: / টিএমপি / 135_পানা / 1280
5: / টিএমপি / 135_পানা
6: / টিএমপি / ওয়েইননাচস্টেফিয়ার
7: / টিএমপি
8: / স্থানীয় / হোম / ফ্রেমস্ট্যাগ
নির্বাচন করুন: 4
framstag @ wupp: / tmp / '135_pana / 1280:

সিডিডি অটোকড ওরফে "সিডি বিহীন সিডি" দিয়ে কাজ করে: আপনাকে সিডি বা পুশ টাইপ করতে হবে না।


2

আমি আপনাকে আমার বর্ধিত 'সিডি' ফাংশনটি সুপারিশ করতে চাই:

https://github.com/dczhu/ltcd

এখানে চিত্র বর্ণনা লিখুন

জীবনকে সহজ করার জন্য এটি নিম্নলিখিত বৈশিষ্ট্যগুলি সরবরাহ করে:

  • গ্লোবাল দির তালিকা, যা সমস্ত টার্মিনাল ট্যাব / উইন্ডো থেকে সম্প্রতি দেখা দির দেখায়।
  • স্থানীয় দির তালিকা, যা বর্তমান শেল সেশনের স্থানীয়।
  • উভয় তালিকাগুলি জে / কে (নীচে / উপরে যান), সংখ্যা এবং শব্দ অনুসন্ধান করে দ্রুত নেভিগেশন সমর্থন করে।
  • গ্লোবাল ফ্রি জাম্পিং (যেমন "সিডি দির" বা "সিডি এআর" / পাথ / টু / ফু / বার / ডিরেক্টরি / যেতে হবে) go

এইচএম, আশাব্যঞ্জক দেখাচ্ছে। আমি এটা দেখে নেব.
ddnomad

1

বাশের জন্য , মূলত: pushdডিরেক্টরীগুলি পরিবর্তন করতে সিডি ব্যবহারের পরিবর্তে সেগুলি সংরক্ষণ করা হয় (অর্থাত স্তুপীকৃত)

pushd /home; pushd /var; pushd log

স্ট্যাকের ব্যবহারটি দেখতে dirsএবং সহজে নেভিগেশনের জন্য ("স্ট্যাক-এন্ট্রি" ব্যবহারের সংখ্যা পেতে:

dirs -v

আউটপুট:

me@myhost:/home$ dirs -v
 0  /home
 1  /var
 2  /tmp

এখন এই সংখ্যাগুলি সাথে cdএবং ~মত ব্যবহার করুন :

cd ~1

তবে এখন এই সংখ্যাগুলি এখনই পুনরায় সাজানো হয়েছে এবং অবস্থান "0" পরিবর্তিত হবে, সুতরাং কেবলমাত্র pushdশীর্ষস্থানীয় ডিরেক্টরিতে ডিরেক্টরিটি দুটি বার (বা 0 অবস্থানের উপর একটি ডামি ব্যবহার করুন) যেমন:

me@myhost:/home$ dirs -v
 0  /home
 1  /home
 2  /var
 3  /tmp

এখন 1..3 সেখানে অবস্থান রাখবে আমি এটি কোথাও পড়েছি তবে আর জানি না, তাই ক্রেডিট না দেওয়ার জন্য দুঃখিত sorry

(বর্তমান ডিরেক্টরিটিকে স্ট্যাক থেকে প্রকাশ করতে / ইতিহাসের ব্যবহার থেকে মুছে ফেলা popd)


1

312 পৃষ্ঠায় "শেল প্রোগ্রামিং, 4 ই" তে সিডিডি ফাংশনটি দেখুন It এটি ইতিহাসকে একটি অ্যারেতে রাখে।

এখানে আরও উন্নত সংস্করণ রয়েছে: https://drive.google.com/open?id=0B4f-lR6inxQWQ1pPZVpUQ3FSZ2M

এটি সিডিআইএসটিফিল ফাইলটিতে ইতিহাস সংরক্ষণ করে এবং সর্বাধিক সাম্প্রতিক ডিরেক্টরিতে পরিবর্তনের অনুমতি দেয় যাতে স্ট্রিং রয়েছে, যেমন,

cd -src

এটি একটি বিদ্যমান সিডি কমান্ডের মাধ্যমে নিজেকে ইনস্টল করে alias cd=_cd


1

কেবল একটি সম্ভাব্য সমাধান হিসাবে fzf- চিহ্ন যুক্ত করতে চেয়েছিলেন ।

একবার ইনস্টল হয়ে গেলে এটি আপনাকে কমান্ড চিহ্ন দেয় এবং বুকমার্কযুক্ত ডিরেক্টরিগুলি যুক্ত করতে এবং অনুসন্ধান করতে লাফ দেয় (হ্যাঁ, এটি ঠিক সম্পূর্ণ ইতিহাস নয়, কেবল আপনি নিজেরাই বুকমার্ক করেছেন)।

পুশ / পপড দিয়ে আমার যে সমস্যাটি রয়েছে তা সেশনের নির্দিষ্ট আচরণের অর্থাত্, যেমন আমি বিভিন্ন বাশ সেশনে একই স্ট্যাক রাখতে চাই বা যা fzf- চিহ্নগুলির পক্ষে সম্ভব।


0

আমি @ মাইক্রোজারের দেওয়া উত্তরটি চেষ্টা করেছিলাম, তবে এটি আমার পক্ষে বেশ কার্যকর হয়নি। কীভাবে এটি ঠিক করা যায় তা আমি বুঝতে পারি না, তাই আমি কেবল নিজের লেখা:

cd() {
    # Set the current directory to the 0th history item
    cd_history[0]=$PWD
    if [[ $1 == -h ]]; then
        for i in ${!cd_history[@]}; do
            echo $i: "${cd_history[$i]}"
        done
        return
    elif [[ $1 =~ ^-[0-9]+ ]]; then
        builtin cd "${cd_history[${1//-}]}" || # Remove the argument's dash
        return 
    else
        builtin cd "$@" || return # Bail if cd fails
    fi
    # cd_history = ["", $OLDPWD, cd_history[1:]]
    cd_history=("" "$OLDPWD" "${cd_history[@]:1:${#cd_history[@]}}")
}

এটি গিটহাব গিস্ট হিসাবেও উপলব্ধ । এটি ব্যবহার করার জন্য, কেবল আপনার .bashrcবা অনুরূপটিতে ফাংশনটি cd -5আটকে দিন এবং আপনি যে 5 তম সর্বশেষ ডিরেক্টরিতে এসেছিলেন সেখানে ফিরে যাওয়ার মতো জিনিস আপনি করতে সক্ষম হবেন you আপনাকে cd -hআপনার ইতিহাসের একটি ওভারভিউ দেবে।

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