วิธีบรรทัดคำสั่งอย่างรวดเร็วเพื่อสลับระหว่างหลายไดเรกทอรีสำหรับการบริหารระบบคืออะไร?


46

วิธีบรรทัดคำสั่งอย่างรวดเร็วเพื่อสลับระหว่างหลายไดเรกทอรีสำหรับการบริหารระบบคืออะไร? ฉันหมายถึงฉันสามารถใช้pushd .และpopdสลับได้ แต่ถ้าฉันต้องการเก็บทวีคูณและวนรอบพวกมันแทนที่จะโผล่มันออกอย่างถาวรที่ด้านล่างของสแต็ก


$CDPATHบางที?
roaima

6
โอ้ฉัน - ฉันเพิ่งเรียนรู้เกี่ยวกับcd -หลังจาก googling บ้าจี้จากคำถามนี้
Nacht - Reinstate Monica

@Nacht: คุณนำทางโครงสร้างไฟล์มาก่อนอย่างไร ??
โลนโบ้ต

1
ไม่ได้cdทุกที่ด้วยมือ มันเจ็บปวดมาก ใช้การเติมข้อมูลอัตโนมัติที่มีคีย์แท็บ
Volomike

1
บางทีคุณอาจต้องการที่จะให้Za ลอง มีประโยชน์อย่างยิ่งเมื่อคุณกระโดดไปมาเยอะ ๆ ภายในคู่หูคู่เดียวกัน
Rolf

คำตอบ:


28

ใช้pushdแล้วชื่อพิเศษสำหรับไดเรกทอรีในกองไดเรกทอรีของคุณ: ~1, ~2ฯลฯ

ตัวอย่าง:

tmp $ dirs -v
 0  /tmp
 1  /tmp/scripts
 2  /tmp/photos
 3  /tmp/music
 4  /tmp/pictures
tmp $ cd ~3
music $ dirs -v
 0  /tmp/music
 1  /tmp/scripts
 2  /tmp/photos
 3  /tmp/music
 4  /tmp/pictures
music $ cd ~2
photos $ cd ~4
pictures $ cd ~3
music $ cd ~1
scripts $ 

วิธีที่มีประสิทธิภาพมากที่สุดในการใช้pushdวิธีนี้คือการโหลดรายการไดเรกทอรีของคุณจากนั้นเพิ่มไดเรกทอรีอีกหนึ่งรายการเพื่อเป็นไดเรกทอรีปัจจุบันของคุณแล้วคุณสามารถข้ามไปมาระหว่างตัวเลขคงที่


นอกจากนี้ยังเป็นที่น่าสังเกตว่าcd -จะนำคุณไปยังไดเรกทอรีสุดท้ายที่คุณอยู่ใน. ดังนั้นจะcd ~-

ประโยชน์ของการ~-มากกว่าเพียงแค่-ว่า-มีเฉพาะในcdขณะที่~-มีการขยายจากเปลือกของคุณเช่นเดียวกับที่~1, ~2ฯลฯ สิ่งนี้มีประโยชน์เมื่อทำการคัดลอกไฟล์ระหว่างเส้นทางไดเรกทอรีที่ยาวมาก ๆ เช่น:

cd /very/long/path/to/some/directory/
cd /another/long/path/to/where/the/source/file/is/
cp myfile ~-

ข้างต้นเทียบเท่ากับ:

cp /another/long/path/to/where/the/source/file/is/myfile /very/long/path/to/some/directory/

1
สามารถใช้cd -
Volomike

cd -ทำหน้าที่เหมือนออกมาDROP DUPเช่นถ้าเริ่มต้นด้วยในไดเรกทอรีกับสแต็คABCDการเปลี่ยนแปลงสแต็คในการค้าบีบีซีดี บางทีนั่นอาจเป็นข้อผิดพลาด แต่เนื่องจากเป็นครั้งที่สองการเปลี่ยนแปลงสแต็คกลับไปABCD จากนี้เราสามารถอนุมานได้ว่าใช้โครงสร้างข้อมูลแยกต่างหากเพื่อจัดเก็บไดเรกทอรีก่อนหน้านี้นอกเหนือจากการเปลี่ยนสแต็ก cd -bashcd -cd -
agc

3
@agc cd -ใช้$OLDPWDแล้วไม่มีอะไรอื่น
สัญลักษณ์แทน

ดังนั้นอาจจะcd -เป็นคุณสมบัติทุบตีก่อนหน้าหลังจากนั้นพวกเขาเพิ่มสแต็ก แต่กลัวว่าจะทำลายรหัสเก่ามากกว่าที่พวกเขาต้องการการออกแบบที่เรียบง่าย การแก้ไขไปก่อนหน้าcd -ทำหน้าที่คล้าย Forth OLDPWD @ SWAP OLDPWD ! DUP . ซึ่งแตกต่างจากcd fooการcd -พิมพ์ชื่อของไดเรกทอรีแลกเปลี่ยนใน
agc

หรือมีwrapper pushd แบบโต้ตอบอยู่เสมอ(คำตอบอื่น ๆ สำหรับคำถามนั้นรวมถึง autojump เป็นต้น)
ไม่มีประโยชน์

42

bashbuiltin ของpushdด้วย+และ-ตัวเลือกสามารถหมุนไดเรกทอรีสแต็ค ไวยากรณ์อาจสับสนเล็กน้อยอาจเป็นเพราะสแต็กนั้นเป็นอาร์เรย์แบบzero- based ฟังก์ชั่น wrapper ง่าย ๆ เหล่านี้วนไปตามสแต็กไดเร็กทอรี:

# cd to next     directory in stack (left  rotate)
ncd(){ pushd +1 > /dev/null ; }
# cd to previous directory in stack (right rotate)
pcd(){ pushd -0 > /dev/null ; }

ทดสอบ: ตั้งค่าสแต็คสี่ไดเรกทอรี

dirs -c   # clear directory stack
cd /home ; pushd /etc ; pushd /bin ; pushd /tmp

ตอนนี้/ tmpเป็นไดเรกทอรีปัจจุบันและสแต็กมีลักษณะดังนี้:

/tmp /bin /etc /home

เปลี่ยนเป็นไดเร็กทอรีถัดไปในสแต็ก (และแสดง) สี่ครั้ง:

ncd ; pwd ; ncd ; pwd ; ncd ; pwd ; ncd ; pwd

เอาท์พุท:

/bin
/etc
/home
/tmp

เปลี่ยนเป็นไดเร็กทอรีก่อนหน้าในสแต็ก (และแสดง) สี่ครั้ง:

pcd ; pwd ; pcd ; pwd ; pcd ; pwd ; pcd ; pwd

เอาท์พุท:

/home
/etc
/bin
/tmp

หมายเหตุเกี่ยวกับcd -: คำตอบของ Wildcardช่วยอธิบายcd -ว่าไม่ได้ใช้อาร์เรย์$ DIRSTACK (ใช้ตัวแปร$ OLDPW ) เพื่อที่cd -จะไม่ส่งผลกระทบต่อ$ DIRSTACKตามที่ควรจะเป็น swap ตามสแต็ก เพื่อแก้ไขให้ถูกต้องนี่คือฟังก์ชั่นการแลกเปลี่ยน$ DIRSTACK- based ที่ใช้งานง่าย:

scd() { { pushd ${DIRSTACK[1]} ; popd -n +2 ; } > /dev/null ; }

ทดสอบ:

dirs -c; cd /tmp; \
pushd /bin; \
pushd /etc; \
pushd /lib; \
pushd /home; \
scd; dirs; scd; dirs

เอาท์พุท:

/bin /tmp
/etc /bin /tmp
/lib /etc /bin /tmp
/home /lib /etc /bin /tmp
/lib /home /etc /bin /tmp
/home /lib /etc /bin /tmp

ความหงุดหงิดของฉันคือฉันต้องการวางไอเท็มลงในสแต็กและเก็บไว้ที่นั่นจนกว่าฉันจะเลือกเคลียร์สแต็ก ด้วยวิธีนี้ฉันสามารถผลักดันผลักแล้วหมุนไปตามแต่ละ dirs ตามความจำเป็น พูดเช่นฉันต้องการพลิกระหว่างสามไดเรกทอรีราวกับว่าพวกเขาเป็นแท็บเบราว์เซอร์และกลับไปกลับมาจนกว่าฉันจะปิดแท็บ ที่อยู่นี้อยู่ในบรรทัดคำสั่งหรือไม่?
Volomike

5
ใช่ฉันเชื่อว่ามันลองดู การลบรายการด้านบนไม่popdที่จะเอามันออกไปโดยไม่ต้องเปลี่ยน dirs popd -nทำ เพื่อล้างสแต็คกันdirs -cเลย น่าเสียดายที่นักออกแบบทุบตีฝังฟังก์ชันที่มีประโยชน์ในรูปแบบที่ไม่ง่าย ดูman bashใต้pushd, dirsฯลฯ
agc

Works! และชัดเจนว่าเป็นโคลนในเอกสาร ฉันชอบความเรียบง่ายของมันตอนนี้ฉันรู้เทคนิคแล้ว
Volomike

13

ผมขอแนะนำให้คุณติดตั้งFASD มันช่วยให้คุณสามารถข้ามไปยังไดเรกทอรีใด ๆ ที่คุณเคยเข้ามาได้อย่างรวดเร็วโดยการพิมพ์ชื่อเพียงเล็กน้อย

ตัวอย่าง: หากคุณเคยเยี่ยมชม/home/someName/scripts/คุณสามารถข้ามไปที่นั่นได้โดยพิมพ์z scrตัวอย่าง วิธีที่สะดวกกว่าคือการจดจำการสั่งซื้อใน stack history หรือสิ่งอื่นที่คล้ายคลึงกัน


10

เมื่อคุณcdอยู่ที่ไหนสักแห่ง Bash จะเก็บไดเรกทอรีสภาพการทำงานเก่าซึ่งเป็นตัวแปรสภาพแวดล้อม, $OLDPWD.

คุณสามารถเปลี่ยนกลับไปยังไดเรกทอรีที่มีซึ่งเทียบเท่ากับcd -cd "$OLDPWD"

คุณสามารถย้อนกลับไปมาระหว่างไดเรกทอรีเช่น:

blue$ cd ~/green
green$ cd -
blue$ cd -
green$

6

ฉันเขียนสคริปต์ชื่อxyzzyเพื่อทำสิ่งนี้:

#!/bin/bash

i="$1"
i=$((${i//[^0-9]/}))
i="$(($i-1+0))"

b="$2"
b=$((${b//[^0-9]/}))
b="$(($b-1+0))"

if [ -z "$XYZZY_INDEX" ]; then
    XYZZY_INDEX="$((-1))"
fi

if [ ! -f "/tmp/xyzzy.list" ]; then
    touch /tmp/xyzzy.list
    chmod a+rw /tmp/xyzzy.list
fi
readarray -t MYLIST < /tmp/xyzzy.list

showHelp(){
read -r -d '' MYHELP <<'EOB'
xyzzy 1.0

A command for manipulating escape routes from grues. Otherwise known as a useful system admin
tool for storing current directories and cycling through them rapidly. You'll wonder why this
wasn't created many moons ago.

Usage: xyzzy [options]

help/-h/--help      Show the help.

this/-t/--this      Store the current directory in /tmp/xyzzy.list

begone/-b/--begone  Clear the /tmp/xyzzy.list file. However, succeed with a number and
            it clears just that item from the stored list.

show/-s/--show      Show the list of stored directories from /tmp/xyzzy.list

. #         Use a number to 'cd' to that directory item in the stored list. This syntax is odd:

            . xyzzy 2

            ...would change to the second directory in the list

. [no options]      Use the command alone and it cd cycles through the next item in the stored 
            list, repeating to the top when it gets to the bottom. The dot and space before xyzzy
            is required in order for the command to run in the current shell and not a subshell:

            . xyzzy

Note that you can avoid the odd dot syntax by adding this to your ~/.bashrc file:

  alias xyzzy=". xyzzy"

and then you can do "xyzzy" to cycle through directories, or "xyzzy {number}" to go to a
specific one.

May you never encounter another grue.

Copyright (c) 2016, Mike McKee <https://github.com/volomike>
EOB
    echo -e "$MYHELP\n"
}

storeThis(){
    echo -e "With a stroke of your wand, you magically created the new escape route: $PWD"
    echo "$PWD" >> /tmp/xyzzy.list
    chmod a+rw /tmp/xyzzy.list
}

begoneList(){
    if [[ "$b" == "-1" ]]; then
        echo "POOF! Your escape routes are gone. We bless your soul from the ever-present grues!"
        >/tmp/xyzzy.list
        chmod a+rw /tmp/xyzzy.list
    else
        echo -n "Waving your wand in the dark, you successfully manage to remove one of your escape routes: "
        echo "${MYLIST[${b}]}"
        >/tmp/xyzzy.list
        chmod a+rw /tmp/xyzzy.list
        for x in "${MYLIST[@]}"; do
            if [[ ! "$x" == "${MYLIST[${b}]}" ]]; then
                echo "$x" >> /tmp/xyzzy.list
            fi
        done
    fi
}

showList(){
    echo -e "These are your escape routes:\n"
    cat /tmp/xyzzy.list
}

cycleNext(){
    MAXLINES=${#MYLIST[@]}
    XYZZY_INDEX=$((XYZZY_INDEX+1))
    if [[ $XYZZY_INDEX > $(($MAXLINES - 1)) ]]; then
        XYZZY_INDEX=0
    fi
    MYLINE="${MYLIST[${XYZZY_INDEX}]}"
    cd "$MYLINE";
}

switchDir(){
    MYLINE="${MYLIST[${i}]}"
    cd "$MYLINE";
}

if [[ "$@" == "" ]];
then
    cycleNext
fi;

while [[ "$@" > 0 ]]; do case $1 in
    help) showHelp;;
    --help) showHelp;;
    -h) showHelp;;
    show) showList;;
    -s) showList;;
    --show) showList;;
    list) showList;;
    this) storeThis;;
    --this) storeThis;;
    -t) storeThis;;
    begone) begoneList;;
    --begone) begoneList;;
    *) switchDir;;
    esac; shift
done

export XYZZY_INDEX

วิธีที่ฉันใช้นี่คือการคัดลอกไปยัง/usr/binโฟลเดอร์และจากนั้นchmod a+xบน จากนั้นฉันแก้ไขไฟล์ root และบัญชีผู้ใช้ของฉัน~/.bashrcเพื่อรวมบรรทัดเหล่านี้ที่ด้านล่าง:

alias xyzzy='. xyzzy'
alias xy='. xyzzy'

'xy' เป็นรูปแบบย่อของคำสั่งสำหรับการพิมพ์ที่เร็วขึ้น

จากนั้นฉันสามารถจัดเก็บไดเรกทอรีปัจจุบันในรายการด้วย ...

xyzzy this

... และทำซ้ำตามความจำเป็น เมื่อฉันเติมรายการนี้ด้วยไดเรกทอรีที่ฉันต้องการมันจะอยู่ที่นั่นจนกว่าฉันจะรีบูตคอมพิวเตอร์เพราะนั่นคือเมื่อ / tmp ถูกลบออกอีกครั้ง ฉันสามารถพิมพ์ ...

xyzzy show

... เพื่อแสดงรายการไดเรกทอรีที่บันทึกไว้ในปัจจุบัน เพื่อสลับไปยังไดเรกทอรีฉันมีสองตัวเลือก ทางเลือกหนึ่งคือการระบุเส้นทางตามดัชนี (และเป็นดัชนีแบบ 1):

xyzzy 2

... ซึ่งจะเปลี่ยนเป็นไดเรกทอรีซึ่งเป็นรายการที่สองในรายการ หรือฉันสามารถทิ้งเลขดัชนีและทำ:

xyzzy

... เพื่อให้มันวนซ้ำแต่ละไดเรกทอรีตามที่ฉันต้องการ สำหรับคำสั่งเพิ่มเติมที่คุณสามารถทำได้ให้พิมพ์:

xyzzy help

แน่นอนว่างานจะสนุกยิ่งขึ้นด้วยคำสั่ง echo ที่ฉันเพิ่มเข้าไป

โปรดทราบว่า xyzzy เป็นการอ้างอิงถึงการผจญภัยของข้อความCollosal Caveซึ่งการพิมพ์ xyzzy จะช่วยให้คุณสลับระหว่างสองห้องในเกมเพื่อหลีกเลี่ยงความวุ่นวาย


2
+1 ฉันเริ่มเล่นกับสิ่งนี้ เป็นเรื่องที่ดี แต่ดูเหมือนว่าจะล้มเหลวหากยังไม่มีการเพิ่มไดเรกทอรีและคุณป้อนเพียง xyzzy ต้องมีการทดสอบอีกหนึ่งรายการสำหรับ MAXLINES -eq 0 ในไซโคลเท็กซ์ ()
Joe

5

ฉันใช้สคริปต์ขนาดเล็กที่ชื่อว่า z [link]ซึ่งอาจเป็นที่สนใจแม้ว่ามันจะไม่ทำสิ่งที่คุณถาม

NAME
       z - jump around

SYNOPSIS
       z [-chlrtx] [regex1 regex2 ... regexn]

AVAILABILITY
       bash, zsh

DESCRIPTION
       Tracks your most used directories, based on 'frecency'.

       After  a  short  learning  phase, z will take you to the most 'frecent'
       directory that matches ALL of the regexes given on the command line, in
       order.

       For example, z foo bar would match /foo/bar but not /bar/foo.

บางทีฉันอาจพลาดบางอย่าง แต่ฉันจะหาสคริปต์ z ได้จากที่ใด
Joe

ขออภัยลิงค์อยู่ใน z จะแก้ไขเพื่อให้ง่ายต่อการมองเห็น
Graipher

5

นอกจากนี้ยังมีcd_funcPetar Marinov ซึ่งcdมีประวัติถึง 10 รายการ: http://linuxgazette.net/109/misc/marinov/acd_func.html

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

Siimply ใช้cd --เพื่อแสดงรายการของอดีตถึง 10 ไดเรกทอรีที่คุณcdแก้ไขและcd -N(ซึ่งNเป็นดัชนีของรายการ) เพื่อไปที่นั่น


4

ฉันส่วนใหญ่ใช้ ZSH กับโปรไฟล์oh-my-zsh คุณสามารถพิมพ์ลงในเทอร์มินัลการแข่งขันต่อไปนี้:

# cd /ho

จากนั้นคุณสามารถใช้ลูกศร (ขึ้นและลง) เพื่อดูประวัติเชลล์ทั้งหมดที่แสดงเฉพาะรายการที่เริ่มต้นด้วยอักขระด้านบน ตัวอย่างเช่นหากคุณไปที่/home/morfik/Desktop/และ/home/morfik/something/คุณสามารถสลับระหว่างไดเรกทอรีได้อย่างรวดเร็ว ไม่สำคัญว่ามีกี่รายการในประวัติเชลล์ที่คุณมี แต่เมื่อคุณมีจำนวนมากเพียงใช้นิพจน์ที่ดีกว่าคือcd /home/morfและที่นี่กดลูกศรขึ้น / ลงบนคีย์บอร์ดของคุณ

นอกจากนี้ยังมีวิธีอื่นในการแก้ปัญหา ในกรณีนี้คุณต้องใช้tmuxและFZF จากนั้นคุณสร้างฮอตคีย์เช่น ctrl-r และเมื่อคุณกดมันหน้าต่างปัจจุบันของคุณจะถูกแบ่งออกและคุณจะเห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณสามารถใช้นิพจน์เพื่อค้นหารายการ ฉันเพิ่งพิมพ์^cd /mediaซึ่งจะส่งกลับเฉพาะรายการที่ขึ้นต้นด้วยวลี แน่นอนคุณสามารถพิมพ์'cd 'homeเพื่อจับคู่คำสั่งและชื่อไดเรกทอรีทั้งหมด (ไม่ใช่พา ธ เพียงชื่อ):

ป้อนคำอธิบายรูปภาพที่นี่


4

คุณสามารถทำสิ่งนี้ได้ด้วยนามแฝงใน~/.bashrc(หรือเทียบเท่า)

เป้าหมายหลักคือการพิมพ์ขั้นต่ำใกล้ (เช่นd5ข้ามไปยังไดเรกทอรีหมายเลข 5 ในกลุ่ม) เพื่อสลับระหว่างไดเรกทอรีในกลุ่ม นอกจากนี้เราต้องการทำให้ง่ายต่อการเพิ่ม / ลบไดเรกทอรีไปยัง / จากกลุ่ม:

alias pd=pushd
alias po=popd
alias d='dirs -v'
alias d0=d
alias d1='pd +1'
alias d2='pd +2'
alias d3='pd +3'
alias d4='pd +4'
alias d5='pd +5'
alias d6='pd +6'
alias d7='pd +7'
alias d8='pd +8'
alias d9='pd +9'
alias d10='pd +10'
# -- feel free to add more aliases if your typical dir pool is larger than 10

ตอนนี้ทุกครั้งที่คุณผลักดันไดเรกทอรีบนสแต็กมันจะถูกเพิ่มไปยังสระว่ายน้ำตัวเลขที่ตำแหน่ง 0 (dir ปัจจุบัน) และคุณสามารถกระโดดไปรอบ ๆ (สลับไดเรกทอรี) โดยใช้การพิมพ์เพียงเล็กน้อย ( d<N>) และคุณสามารถดู dเวลาโดยเพียงแค่พิมพ์

ตัวอย่างการใช้นามแฝงเหล่านี้:

แสดงตัวเลข dir-pool (dir ปัจจุบันคือ # 0)

$ d
 0  /tmp
 1  /
 2  /usr

สลับไปมาระหว่าง dirs: use d<N>

$ d2
$ pwd
/usr

เพิ่มไดเรกทอรีใหม่ลงในกลุ่ม

$ pd /var/log
$ d
 0  /var/log
 1  /usr
 2  /tmp
 3  /

กระโดดไปรอบ ๆ เพิ่มเติม:

$ d3
$ pwd
/

$ d3
$ pwd
/tmp

$ d
 0  /tmp
 1  /
 2  /var/log
 3  /usr

ลบ / ป๊อปด้านบน (ปัจจุบัน) dir จากสระว่ายน้ำ

$ po
$ d
 0  /
 1  /var/log
 2  /usr

2

หากคุณติดตั้งiselectไว้คุณสามารถทำสิ่งนี้ได้:

$ alias dirselect='cd $(iselect -a $(dirs -l -p | sort -u))'
$ dirselect

สิ่งนี้จะให้เมนูนำทาง - ลูกศรแบบอินเทอร์แอคทีฟลูกศร - คีย์แบบเต็มหน้าจอเพื่อเลือกไดเรกทอรีไปcdยัง

หากคุณไม่ได้ใช้pushdในเซสชันเชลล์ปัจจุบันรายการไดเรกทอรีในเมนูจะเริ่มต้นด้วยรายการเดียวนั่นคือไดเรกทอรีปัจจุบันของคุณ หากมีเพียงรายการเดียวdirselectนามแฝงนี้จะcdเข้าชมโดยไม่มีหน้าจอเมนูดังนั้นจึงไม่cd -ทำสิ่งใดอย่างมีประสิทธิภาพ (ยกเว้นป้องกันการทำสิ่งที่มีประโยชน์)

ในการเพิ่มไดเรกทอรีใหม่ลงในรายการให้ใช้pushd dir(หรือpushd -n dirเพื่อเพิ่ม dir โดยไม่ต้องcdทำในเวลาเดียวกัน)

คุณสามารถเติมpushdสแต็กล่วงหน้าได้โดยทำสิ่งต่อไปนี้ในของคุณ.bashrcหรือ~/.bash_profile:

for d in /var/tmp /tmp /path/to/somewhere/interesting ; do 
  pushd -n "$d" > /dev/null
done

คุณสามารถลบรายการที่มีหรือpopdpopd -n

ดูhelp pushd, help popdและhelp dirsในทุบตีสำหรับข้อมูลเพิ่มเติม และแน่นอนman iselect.

BTW iselectอาจพร้อมใช้งานล่วงหน้าสำหรับ distro ของคุณ มันมีไว้สำหรับเดเบียนและอูบุนตูและอาจเป็นของผู้อื่นเช่นกัน


2

หากคุณมี 5 หรือ 10 ไดเรกทอรีที่คุณใช้บ่อยและไม่จำเป็นว่าจะต้องใส่ใจกับไดเรกทอรีที่ใช้ 5 หรือ 10 รายการล่าสุดตั้งค่าชื่อแทนคำสั่งบางอย่างเช่น

alias cdw="cd /var/www/html" 

ดังนั้นเมื่อฉันต้องการไปยังไดเรกทอรีโฮมเพจ Apache ฉันเพียงพิมพ์cdwตามที่ฉันตอบในนามแฝงเทียบเท่าสำหรับลิงก์สัญลักษณ์? .


2

ฉันใช้การข้ามเพื่อเปลี่ยนไดเรกทอรีทำงานอย่างรวดเร็ว

ในการเพิ่มไดเรกทอรีปัจจุบัน:

jump -a [bookmark-name]

หากต้องการแสดงรายการบุ๊คมาร์คทั้งหมดของคุณ:

jump -l

เช่น:

------------------------------------------------------------------
 Bookmark    Path                                                 
------------------------------------------------------------------
 reports     ~/mydir/documents/reports
 projects    ~/documents/projects
 dl          ~/Downloads                     
------------------------------------------------------------------

ตอนนี้คุณสามารถข้ามไปยังไดเรกทอรีอื่นได้อย่างง่ายดาย:

jump reports

รองรับการเติมข้อความอัตโนมัติสำหรับ bash และ zsh


แก้ไข (ในการตอบสนอง @ Joe): ไบนารีjump-binถูกเก็บไว้ใน/usr/local/binและมีสคริปต์บูรณาการทุบตี (ในเครื่องคอมพิวเตอร์ของฉันอยู่ที่/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver) มันจะสร้างฟังก์ชั่นทุบตีที่โทรjumpjump-bin


คำสั่ง jump อยู่ที่ไหน? ฉันไม่มีและไม่เห็นว่าจะซื้อทันที
Joe

2

ฉันใช้aliasเพื่อนำทาง หากคุณมีไดเรกทอรีจำนวนน้อยที่เข้าถึงได้บ่อยครั้งให้ตั้งชื่อแทน ตัวอย่างเช่น,

alias e='cd /etc'
alias h='cd /home'
alias al='cd /var/log/apache2/'

จากนั้นก็ง่ายๆ

e 

/etcจะนำคุณไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.