Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Điều hướng Bash shell bằng pushd và popd

Đẩy mạnh popd các lệnh là các tính năng tích hợp của Bash shell để giúp bạn "đánh dấu" các thư mục để điều hướng nhanh giữa các vị trí trên ổ cứng. Bạn có thể đã cảm thấy rằng thiết bị đầu cuối là một cách cực kỳ nhanh chóng để điều hướng máy tính của bạn; chỉ với một vài lần nhấn phím, bạn có thể truy cập vào bất kỳ đâu trên ổ cứng, bộ nhớ đính kèm hoặc chia sẻ mạng của mình. Tuy nhiên, tốc độ đó có thể bị phá vỡ khi bạn thấy mình qua lại giữa các thư mục hoặc khi bạn bị "lạc" trong hệ thống tệp của mình. Đó chính xác là những vấn đề pushd popd có thể giúp bạn giải quyết.

pushd

Về cơ bản nhất, pushd rất giống cd . Nó đưa bạn từ thư mục này sang thư mục khác. Giả sử bạn có một thư mục được gọi là một , chứa thư mục con có tên hai , chứa một thư mục con được gọi là ba , và như thế. Nếu thư mục làm việc hiện tại của bạn là một , sau đó bạn có thể chuyển sang hai hoặc ba hoặc bất kỳ nơi nào có cd lệnh:

 $ pwd 
một
$ cd hai / ba
$ pwd
ba

Bạn có thể làm tương tự với pushd :

 $ pwd 
một
$ pushd hai / ba
~ / một / hai / ba ~ / một
$ pwd
ba

Kết quả cuối cùng của pushd giống với cd , nhưng có một kết quả trung gian bổ sung: pushd lặp lại thư mục đích và điểm xuất xứ của bạn. Đây là ngăn xếp thư mục của bạn và nó là thứ tạo nên pushd duy nhất.

Ngăn xếp

Ngăn xếp, trong thuật ngữ máy tính, đề cập đến một tập hợp các phần tử. Trong ngữ cảnh của lệnh này, các phần tử là các thư mục bạn đã truy cập gần đây bằng cách sử dụng pushd yêu cầu. Bạn có thể coi nó như một lịch sử hoặc một dấu vết.

Bạn có thể di chuyển trên toàn bộ hệ thống tệp của mình bằng pushd ; mỗi lần, vị trí trước đó và vị trí mới của bạn được thêm vào ngăn xếp:

 $ pushd four 
~ / one / two / three / four ~ / one / two / three ~ / one
$ pushd five
~ / one / two / three / four / năm ~ / một / hai / ba / bốn ~ / một / hai / ba ~ / một

Khi bạn đã tạo xong một ngăn xếp, bạn có thể sử dụng nó như một bộ sưu tập các dấu trang hoặc điểm tham chiếu di chuyển nhanh. Ví dụ:giả sử rằng trong một phiên bạn đang làm rất nhiều việc trong ~ / một / hai / ba / bốn / năm cấu trúc thư mục của ví dụ này. Bạn biết bạn đã từng đến một gần đây, nhưng bạn không thể nhớ vị trí của nó trong pushd của bạn cây rơm. Bạn có thể xem ngăn xếp của mình với +0 (đó là một dấu cộng theo sau là một số không), cho biết pushd không thay đổi thành bất kỳ thư mục nào trong ngăn xếp của bạn mà còn nhắc pushd để lặp lại ngăn xếp hiện tại của bạn:

 $ pushd +0 
~ / one / two / three / four ~ / one / two / three ~ / one ~ / one / two / three / four / five

Ngoài ra, bạn có thể xem ngăn xếp bằng dirs và bạn có thể xem số chỉ mục cho từng thư mục bằng cách sử dụng -v tùy chọn:

 $ dirs -v 
0 ~ / one / two / three / four
1 ~ / one / two / three
2 ~ / one
3 ~ / one / hai / ba / bốn / năm

Mục nhập đầu tiên trong ngăn xếp của bạn là vị trí hiện tại của bạn. Bạn có thể xác nhận điều đó bằng pwd như thường lệ:

 $ pwd 
~ / one / two / three / four

Bắt đầu từ 0 (vị trí hiện tại của bạn và mục nhập đầu tiên của ngăn xếp của bạn), thứ hai phần tử trong ngăn xếp của bạn là ~ / one , đó là điểm đến mong muốn của bạn. Bạn có thể tiến lên trong ngăn xếp của mình bằng cách sử dụng +2 tùy chọn:

 $ pushd +2 
~ / one ~ / one / two / three / four / five ~ / one / two / three / four ~ / one / two / three
$ pwd
~ / một

Điều này thay đổi thư mục làm việc của bạn thành ~ / one và cũng đã chuyển ngăn xếp để vị trí mới của bạn ở phía trước.

Bạn cũng có thể lùi lại trong ngăn xếp của mình. Ví dụ:để nhanh chóng truy cập ~ / một / hai / ba đưa ra đầu ra ví dụ, bạn có thể lùi lại từng cái một, lưu ý rằng pushd bắt đầu bằng 0:

 $ pushd -0 
~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

Thêm vào ngăn xếp

Bạn có thể tiếp tục điều hướng ngăn xếp của mình theo cách này và nó sẽ vẫn là một danh sách tĩnh các thư mục đã truy cập gần đây của bạn. Nếu bạn muốn thêm một thư mục, chỉ cần cung cấp đường dẫn của thư mục. Nếu một thư mục mới đối với ngăn xếp, thì nó sẽ được thêm vào danh sách giống như bạn mong đợi:

 $ pushd / tmp 
/ tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

Nhưng nếu nó đã tồn tại trong ngăn xếp, nó sẽ được thêm lần thứ hai:

 $ pushd ~ / one 
~ / one / tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / two / three / four

Mặc dù ngăn xếp thường được sử dụng như một danh sách các thư mục bạn muốn truy cập nhanh, nhưng nó thực sự là một lịch sử thực sự về nơi bạn đã ở. Nếu bạn không muốn một thư mục được thêm dư thừa vào ngăn xếp, bạn phải sử dụng ký tự + N -N ký hiệu.

Xóa các thư mục khỏi ngăn xếp

Rõ ràng là ngăn xếp của bạn không phải là bất biến. Bạn có thể thêm vào nó bằng pushd hoặc xóa các mục khỏi nó bằng popd .

Ví dụ:giả sử bạn vừa sử dụng pushd để thêm ~ / một vào ngăn xếp của bạn, tạo ra ~ / one thư mục làm việc hiện tại của bạn. Để xóa phần tử đầu tiên (hoặc "zeroeth", nếu bạn thích):

 $ pwd 
~ / one
$ popd +0
/ tmp ~ / one / two / three ~ / one ~ / one / two / three / four / five ~ / one / hai / ba / bốn
$ pwd
~ / một

Tất nhiên, bạn có thể xóa bất kỳ phần tử nào, bắt đầu số lượng của bạn là 0:

 $ pwd ~ / one 
$ popd +2
/ tmp ~ / one / two / three ~ / one / two / three / four / five ~ / one / two / three / four
$ pwd ~ / one

Bạn cũng có thể sử dụng popd từ phía sau ngăn xếp của bạn, lại bắt đầu bằng 0. Ví dụ:để xóa thư mục cuối cùng khỏi ngăn xếp của bạn:

 $ popd -0 
/ tmp ~ / one / two / three ~ / one / two / three / four / five

Khi được sử dụng như vậy, popd không thay đổi thư mục làm việc của bạn. Nó chỉ thao túng ngăn xếp của bạn.

Hành vi mặc định của popd , không có đối số, là xóa mục đầu tiên (zeroeth) khỏi ngăn xếp của bạn và đặt mục tiếp theo làm thư mục làm việc hiện tại của bạn.

Điều này hữu ích nhất như một lệnh thay đổi nhanh, chẳng hạn như khi bạn đang làm việc trong hai thư mục khác nhau và chỉ cần di chuyển một lúc đến một vị trí khác. Bạn không cần phải suy nghĩ về ngăn xếp thư mục của mình nếu bạn không cần một lịch sử phức tạp:

 $ pwd 
~ / one
$ pushd ~ / one / two / 3/4 / five
$ popd
$ pwd
~ / one

Bạn cũng không bắt buộc phải sử dụng pushd popd liên tiếp nhanh chóng. Nếu bạn sử dụng pushd để ghé thăm một địa điểm khác, sau đó bị phân tâm trong ba giờ đuổi theo một lỗi hoặc thực hiện nghiên cứu, bạn sẽ thấy ngăn xếp thư mục của mình kiên nhẫn chờ đợi (trừ khi bạn đã kết thúc phiên đầu cuối của mình):

 $ pwd ~ / one 
$ pushd / tmp
$ cd {/ etc, / var, / usr}; ngủ 2001
[...]
$ popd
$ pwd
~ / one

Đẩy và bật trong thế giới thực

Đẩy mạnh popd các lệnh hữu ích một cách đáng ngạc nhiên. Một khi bạn tìm hiểu chúng, bạn sẽ tìm thấy lý do để sử dụng chúng tốt và bạn sẽ quen với khái niệm ngăn xếp thư mục. Cảm thấy thoải mái với pushd là điều đã giúp tôi hiểu git stash , hoàn toàn không liên quan đến pushd nhưng tương tự về tính vô hình của khái niệm.

Sử dụng pushd popd trong các tập lệnh shell có thể hấp dẫn, nhưng nói chung, có lẽ tốt nhất là bạn nên tránh chúng. Chúng không thể di động bên ngoài Bash và Zsh và chúng có thể bị lỗi khi bạn đang đọc lại một tập lệnh ( pushd +3 kém rõ ràng hơn cd $ HOME / $ DIR / $ TMP hoặc tương tự).

Ngoài những cảnh báo này, nếu bạn là người dùng Bash hoặc Zsh thông thường, thì bạn có thể và nên thử pushd popd .