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
.
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
.
Câu trả lời:
Có pushd
vàpopd
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í dụ:
$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Việc gọi bash
bắ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 )
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 foo
thấ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.")
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'
..cd
đủ mạnh? có vẻ như nó chỉ loại bỏ 10 mục cuối cùng khỏi ngăn xếp.
pushd 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.