CDについてもっと歴史がありますか?

CDについてもっと歴史がありますか?

cd -最後に訪問したディレクトリに移動できます。過去の歴史に加えて、より多くの歴史を訪問できますか?

答え1

どのシェルを使用しているかを指定していないので、それをzshプロモーションのための言い訳として使用してください。

はい、私たちはより多くの歴史を持っていますcd。特に完成システムと色が有効になっている場合は非常に便利です。cd -2cd -4cd -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'

結果:

ここに画像の説明を入力してください。

答え2

探しているコマンドpushdはとですpopd

見ることができる実際の作業pushdpopdここ

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

答え3

「追加履歴」に関する質問に回答します。いいえ、cd -Bashの機能は「反転」できる単一のディレクトリのみをサポートします。 @Rameshが彼の答えで言ったように。より長いディレクトリの履歴が必要な場合は、 をpushd使用してpopdディレクトリを保存したり、以前のディレクトリに戻ることができます。

また、このコマンドを使用して、現在スタック内のアイテムのリストを表示することもできますdirs

詳細な説明は、次のタイトルで確認できます。PushdとPopdコマンドの使い方は?

答え4

好きなだけ多くの記録を持つことができます。

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これは、POSIX準拠のシェルが-style履歴を提供できるようにするシェル関数ですcd。単一のサブシェルを呼び出さずにすべてのことを行い、そのフローは非常に合理的だと思います。適切なテストでは、すべてのケースを正しく処理するようです。

この関数は、完全に移植可能な構文に依存しながら、環境でできるだけうまく機能しようとします。$DIRSTACK環境変数が自由に使用できる属性であると仮定するだけです。

これは、保存するすべてのパスを正規化$DIRSTACKし、一重引用符で囲まれたすべてのパスをシリアライズします。ただし、各パスを変数値に追加する前に、安全に引用して直列化することを保証し、特殊文字を含むすべての種類の問題に対して使用しないでください。環境変数が設定されている場合、$DIRSTACKMAXこれは履歴に保持されるパスの数の上限として使用され、それ以外の場合は制限は1です。

関数をロードすると正常になりますが、ディレクトリ履歴を変更して戻ることもcdできます。cd -[num]

この関数の主なメカニズムはcdそれ自体と${OLD,}PWD環境変数です。 POSIX はcd各パスの移動に対してこれらの値を変更することを指定するため、シェルの組み込み変数を使用し、必要に応じて値を保存します。

関連情報