cd -
最後に訪問したディレクトリに移動できます。過去の歴史に加えて、より多くの歴史を訪問できますか?
答え1
どのシェルを使用しているかを指定していないので、それをzshプロモーションのための言い訳として使用してください。
はい、私たちはより多くの歴史を持っていますcd
。特に完成システムと色が有効になっている場合は非常に便利です。cd -2
cd -4
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'
結果:
答え2
探しているコマンド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
答え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
各パスの移動に対してこれらの値を変更することを指定するため、シェルの組み込み変数を使用し、必要に応じて値を保存します。