Nó phụ thuộc. Trong zsh
bạn có thể cấu hình cd
để tự động đẩy thư mục cũ trên ngăn xếp thư mục, nhưng nó không phải là cài đặt mặc định.
Theo như tôi có thể nói zsh
với các thiết lập mặc định hoạt động rất giống với bash
:
cd somedir
- thay đổi thư mục thành
somedir
- lưu thư mục gốc trong
OLDPWD
- bộ
PWD="somedir"
- thay thế phần tử trên cùng của ngăn xếp thư mục (như được hiển thị bởi
dirs
) bằng somedir
(số phần tử trên ngăn xếp không thay đổi).
cd -
:
- thay đổi thư mục thành
$OLDPWD
- trao đổi giá trị của
PWD
vàOLDPWD
- sửa đổi phần tử trên cùng của ngăn xếp thư mục để phản ánh (cái mới)
PWD
pushd somedir
:
- thay đổi thư mục thành
somedir
- lưu thư mục gốc trong
OLDPWD
- bộ
PWD="somedir"
- đẩy
somedir
vào ngăn xếp thư mục (mở rộng nó bằng một yếu tố)
popd
:
- lưu thư mục gốc trong
OLDPWD
- xóa phần tử đầu tiên của ngăn xếp thư mục
- thay đổi thư mục thành phần tử trên cùng mới của ngăn xếp thư mục
- được đặt thành
PWD
phần tử trên cùng mới của ngăn xếp thư mục
Lưu ý: Liệu thư mục làm việc hiện tại có được coi là một thành phần của ngăn xếp thư mục khác nhau giữa zsh
và bash
. Tôi đã sử dụng bash
như tài liệu tham khảo cho các danh sách trên.
Trong bash
thư mục làm việc hiện tại được coi là phần tử hàng đầu của ngăn xếp thư mục. Các man 1 bash
nói:
pushd [-n] [dir]
[V]] Thêm dir
vào ngăn xếp thư mục ở trên cùng, làm cho nó trở thành thư mục làm việc hiện tại mới như thể nó đã được cung cấp làm đối số cho cd
nội dung. [Càng]
Printing DIRSTACK
( echo ${dirstack[@]}
) xác nhận rằng phần tử đầu tiên giống hệt $PWD
.
Trong zsh
thư mục làm việc hiện tại không phải là một phần của ngăn xếp thư mục (nhưng vẫn được hiển thị với dirs
). man 1 zshbuiltins
nói:
pushd [ -qsLP ] [ arg ]
[Vuốt] Thay đổi thư mục hiện tại và đẩy thư mục hiện tại cũ lên ngăn xếp thư mục. Ở dạng đầu tiên, thay đổi thư mục hiện tại thành arg. [Càng]
In dirstack
( echo ${dirstack[@]}
) và so sánh nó với đầu ra của dirs
sẽ cho thấy rằng đó PWD
không phải là một phần của `dirstack.
Trong cả hai shell dirs
in thư mục làm việc hiện tại là phần tử đầu tiên. Cũng trong cả hai shell, phần tử ngăn xếp thư mục với chỉ mục 1
đề cập đến thư mục hiện tại trước cuối cùng pushd
. Đó là bởi vì các mảng trong zsh
thường được đánh số từ 1
, trong khi chúng được đánh số từ 0
trong bash
. Vì vậy, có rất ít sự khác biệt thực tế
Như đã nói ở trên, hành vi này có thể được sửa đổi trong zsh
.
Nếu bạn đặt AUTO_PUSHD
tùy chọn trong zsh
( setopt autopushd
) cd somedir
hoạt động như thế pushd somedir
, thư mục trước sẽ tự động được đẩy lên ngăn xếp thư mục. Đây có lẽ là trường hợp trên máy của bạn. Bạn có thể chạy setopt
để nhận danh sách các tùy chọn không được đặt theo cách mặc định. Xem, cho dù autopushd
xuất hiện trong danh sách.
Nhưng điều này không sửa đổi cd -
để hành xử như thế nào popd
. Thay vào đó, nó chỉ đẩy $PWD
vào ngăn xếp thư mục và thay đổi thư mục thành $OLDPWD
. Điều đó có nghĩa là liên tục gọi cd -
sẽ thực sự phát triển ngăn xếp thư mục ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Nếu nó thực sự hoạt động chính xác như popd
trên hệ thống của bạn, tôi sẽ đề xuất nếu cd
thực sự là nội dung ( whence -v cd
); có thể là nó được thay thế bằng một bí danh hoặc chức năng.
Vì ngăn xếp thư mục sẽ phát triển khá nhanh khi AUTO_PUSHD
được bật, bạn có thể giới hạn kích thước của nó bằng cách đặt tham số DIRSTACKSIZE
ở kích thước tối đa mong muốn.
Bạn cũng có thể ngăn ngừa trùng lặp bằng cách đặt PUSHD_IGNORE_DUPS
tùy chọn.
Để biết thêm lựa chọn, hãy xem hướng dẫn .
cd
đặt biến shellOLDPWD
cho thư mục trước đó vàcd -
được dịch sangcd "$OLDPWD"
.