Nó phụ thuộc. Trong zshbạ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 zshvớ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
PWDvà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
somedirvà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
PWDphầ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 zshvà bash. Tôi đã sử dụng bashnhư tài liệu tham khảo cho các danh sách trên.
Trong bashthư 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 bashnói:
pushd [-n] [dir]
[V]] Thêm dirvà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 cdnộ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 zshthư 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 zshbuiltinsnó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 dirssẽ cho thấy rằng đó PWDkhông phải là một phần của `dirstack.
Trong cả hai shell dirsin 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 zshthường được đánh số từ 1, trong khi chúng được đánh số từ 0trong 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_PUSHDtùy chọn trong zsh( setopt autopushd) cd somedirhoạ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ù autopushdxuấ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 $PWDvà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ư popdtrên hệ thống của bạn, tôi sẽ đề xuất nếu cdthự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_DUPStùy chọn.
Để biết thêm lựa chọn, hãy xem hướng dẫn .
cdđặt biến shellOLDPWDcho thư mục trước đó vàcd -được dịch sangcd "$OLDPWD".