Sử dụng popd mà không xóa giá trị cuối cùng


8

Làm thế nào tôi có thể có được hành vi sử dụng popdmà không thực sự bật thư mục cuối cùng ra khỏi ngăn xếp? Nói cách khác, tôi muốn điều hướng trở lại thư mục cuối cùng mà tôi đã đặt pushd, nhưng tôi muốn nó ở trên cùng của ngăn xếp để tiếp theo popdsẽ đưa tôi đến cùng thư mục đó (vẫn sẽ ở trên cùng của thư mục chồng) lại.


Sẽ không "cd -" làm việc? Nếu tôi hiểu, trình tự là: "pushd d1; pushd d2; pushd d3;" và bây giờ để quay lại d2, phải không?
tpb261

cd -hoạt động, nhưng chỉ khi bạn không ở cdbất cứ nơi nào khác cho đến khi bạn sẵn sàng popd. Tôi thường quay lại một vài nơi trước khi tôi sẵn sàng quay trở lại
Freedom_Ben

Điều đó là hiển nhiên .. nhưng bằng cách nào đó tôi đã bỏ lỡ phần "nảy xung quanh" trong câu hỏi của bạn.
tpb261

Câu trả lời:


2

Làm thế nào về: cd "$(dirs -l -p | sed -n '2{p;q}')"


Tuyệt vời, cảm ơn bạn! Đó là một số bash-fu nếu tôi từng thấy nó. Tôi đã đặt bí danh cho lệnh đó peekd(loại C ++ STL-ish và dễ nhớ cho tôi), vì vậy tôi chỉ có thể gõ peekdđể có được hành vi. alias peekd='cd "$(dirs -l -p | sed -n '\''2{p;q}'\'')"'
Freedom_Ben

3
@Freedom_Ben Điều này có thể được đơn giản hóa thànhcd "$(dirs +1)"
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles Khi tôi cố gắng làm điều này, nó báo "bash: cd <thư mục của tôi>: Không có tệp hoặc thư mục như vậy" mặc dù nó rõ ràng tồn tại. bạn có biết tại sao như vậy không? Là cd không diễn giải <thư mục của tôi> đúng như một đường dẫn? Từ thông báo lỗi, có vẻ như nó sẽ hoạt động. tức là <thư mục của tôi> có vẻ đúng và nếu tôi chỉ cần gõ "cd <thư mục của tôi>", nó sẽ hoạt động.
nukeguy

1
@nukeguy Có <my directory>bắt đầu bằng dấu ngã không? Nhận xét của tôi ở trên đã thiếu -ltùy chọn liệt kê toàn bộ thư mục thay vì sử dụng từ ~viết tắt. Nó nên làcd "(dirs -l +1)"
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Vâng! Đó chính xác là những gì tôi đang tìm kiếm, cảm ơn! Có lẽ bạn nên đăng bình luận của bạn như một giải pháp riêng biệt - theo tôi, đó là tùy chọn chung và hữu ích nhất về chủ đề này.
nukeguy

10

Pushd không có đối số hoán đổi hai mục hàng đầu trên ngăn xếp, cho phép bạn có hiệu quả cd qua lại giữa chúng.

Bắt đầu từ d1, thực hiện Pushd d2 thêm d1 và d2 vào ngăn xếp và để bạn trong d2. Thực hiện đẩy lại một lần nữa mà không có đối số và bạn quay lại d1 với d1 và d2 đảo ngược trên ngăn xếp.


6

Nếu tôi hiểu chính xác, bạn có thể pushd .chỉ sau popdđó để popthư mục ed sẽ được đặt lại ở đầu ngăn xếp.


Wow đó là một giải pháp rất dễ dàng và thanh lịch. Cảm ơn!
Freedom_Ben
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.