đẩy / pop thư mục hiện tại?


66

Với bash có cách nào để đẩy và bật thư mục làm việc hiện tại không? Tôi đã thử viết bash;cd dir; ./dostuff;exit;nhưng thư mục hiện tại là bây giờ dir.

linux  bash 

Câu trả lời:


91

pushdpopd

Bash sẽ giữ một lịch sử của các thư mục bạn truy cập, bạn chỉ cần hỏi. Bash lưu trữ lịch sử trong một ngăn xếp và sử dụng các lệnh Pushd và popd để quản lý ngăn xếp.

Thêm để đọc

Thí dụ:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
Trích từ liên kếtpushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
Master Chief

31

Việc gọi bashbắt đầu một mạng con mới, có đầu vào riêng; không có lệnh nào khác sẽ chạy cho đến khi thoát. Xung quanh các lệnh được chạy bằng parens cũng sẽ bắt đầu một lớp con mới, nhưng nó sẽ chạy các lệnh bên trong nó.

( cd dir ; ./dostuff )

1
Xuất sắc! Không cần phải đẩy / bật khi có ý định chỉ chạy một lệnh trong một thư mục khác (ví dụ: cập nhật một phụ thuộc) sau đó quay lại lệnh hiện tại.
Dan Dascalescu

12

Nếu bạn không cần nhiều cấp độ của lịch sử thư mục, bạn cũng có thể làm:

cd foo
# do your stuff in foo
cd -

So với pushd/ popd, điều này có nhược điểm là nếu cd foothất bại, bạn kết thúc trong thư mục sai cd -.

(Có lẽ cd -là các kịch bản bên ngoài tiện dụng hơn. "Hãy quay lại nơi tôi vừa đến.")


4

Tôi sử dụng bí danh để theo dõi các thay đổi thư mục của mình để 'cd' ở đâu đó tôi có thể quay lại nơi tôi đang sử dụng 'cd.' Hoặc quay lại hai bằng cách sử dụng 'cd ..', v.v.;

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
Bạn có thể giải thích chi tiết hơn những gì mã này làm?
bwDraco 17/2/2015

Thật khéo léo. Tôi có bí danh xung quanh Pushd và popd của mình để làm một số điều tôi thích. Tôi sử dụng ngăn xếp thư mục tất cả các thời gian. Tôi ghét xem mọi người cd ở đâu đó và sau đó cuộn lại tìm thư mục trước để cắt và dán. Tôi không thể thực hiện hầu hết các công việc của mình trong thư mục nhà của mình vì hạn ngạch, vì vậy tôi phải sử dụng lưu trữ gộp trên mạng.
Michael Mathews

1
Là bí danh ..cdđủ mạnh? có vẻ như nó chỉ loại bỏ 10 mục cuối cùng khỏi ngăn xếp.
reynoldsnlp
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.