システムが管理する複数のディレクトリを切り替えるためのクイックコマンドライン方法は何ですか?

システムが管理する複数のディレクトリを切り替えるためのクイックコマンドライン方法は何ですか?

システムが管理する複数のディレクトリを切り替えるためのクイックコマンドライン方法は何ですか?私の言葉は、pushd .andを使ってpopd切り替えることができますが、スタックの一番下から永久に取り出すのではなく、複数を保存して繰り返すにはどうすればよいですか?

答え1

bashpushdに内蔵+そして-オプションはディレクトリスタックを回転させることができます。構文は多少混乱する可能性があります。おそらく、スタックが次のようになるからです。若い配列に基づいています。これらの単純なラッパー関数はディレクトリスタックを繰り返します。

# 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 ; }

テスト:4つのディレクトリスタックを設定します。

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

/tmpは現在のディレクトリであり、スタックは次のとおりです。

/tmp /bin /etc /home

スタックの次のディレクトリに4回変更して表示します。

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

出力:

/bin
/etc
/home
/tmp

スタックの前のディレクトリに4回変更して表示します。

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

出力:

/home
/etc
/bin
/tmp

についてcd -ワイルドカード回答ヘルプでは、cd -使用しない方法について説明します。$DISTACK配列(これは$OLDPW変数)cd -影響を与えないように$DISTACKスタックベースの交換はこのように行わなければなりません。この問題を解決するには、次の簡単な方法を使用してください。$DISTACK- ベース交換機能:

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

答え2

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 ~-

~-justよりも利点はに固有ですが、次に拡張される-ことです。-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/

答え3

インストールすることをお勧めします。ファシスト党員。ディレクトリ名の一部だけを入力すると、すでに存在するディレクトリにすばやく移動できます。

例:訪問した場合は、例を入力すると/home/someName/scripts/そのページに移動します。z scrこれは、履歴スタックや同様の順序を覚えているよりもはるかに便利です。

答え4

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その上にコピーすることです。次に、~/.bashrc下部に次の行を含めるようにrootおよびユーザーアカウントファイルを編集しました。

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

「xy」はコマンドの省略形で、入力速度を上げるために使用されます。

その後、現在のディレクトリをリストに保存できます。

xyzzy this

...必要に応じて繰り返します。必要なディレクトリにこのリストを入力すると、コンピュータを再起動するまでそのディレクトリはそのまま残ります。その理由は、/ tmpが再び消去されるためです。それでは打者を打つことができます…

xyzzy show

...現在保存されているディレクトリを一覧表示します。ディレクトリに切り替えるには2つのオプションがあります。 1つのオプションは、次のようにインデックス(1から始まるインデックス)へのパスを指定することです。

xyzzy 2

...リストの2番目のエントリディレクトリに切り替えます。あるいは、インデックス番号を省略して次のようにすることもできます。

xyzzy

...必要に応じて各ディレクトリを循環させます。実行できるコマンドの詳細については、次のように入力してください。

xyzzy help

もちろん、私が追加した愚かなechoドアで作業する方が楽しいです。

xyzzyが正しいことに注意してください。巨大な洞窟xyzzyと入力すると、ゲーム内の2つの部屋を切り替えて問題を回避できるテキストアドベンチャーです。

関連情報