Lệnh Hash trong Bash
Trên các hệ điều hành giống như UNIX, Hash là một lệnh tích hợp của shell Bash, được sử dụng để liệt kê bảng hash của các lệnh được thực thi gần đây. Nó được sử dụng để xem, đặt lại, hoặc thay đổi bằng tay trong bash path hash. Nó giữ vị trí của các chương trình được thực thi gần đây và hiển thị chúng khi chúng ta muốn xem. Nó cung cấp một đường dẫn đầy đủ của mỗi tên lệnh.
Nói cách khác, khi thực thi bất kỳ lệnh nào mà không đặt tên cho đường dẫn của nó, shell bắt đầu tìm kiếm lệnh đó trong các thư mục được liệt kê trong biến path. Khi Bash tìm thấy lệnh đó, nó giữ vị trí trong bảng hash để có thể nhớ vị trí của lệnh. Sau đó, Bash bắt đầu kiểm tra bảng để tìm vị trí của lệnh thay vì tìm kiếm lệnh đó lại. Điều này làm cho việc thực thi lệnh nhanh hơn. Tuy nhiên, nếu lệnh bị di chuyển sau khi ghi nhớ vị trí của nó trong bảng, shell sẽ không thể tìm thấy lệnh. Trong trường hợp này, tìm kiếm đầy đủ các thư mục trong biến path được thực hiện để có được dữ liệu lệnh.
Lệnh ‘hash’ tích hợp được sử dụng để duy trì bảng hash. Mà không có bất kỳ công tắc nào, hash liệt kê các lệnh đã sử dụng trước đó, vị trí của chúng và số lần chúng đã được thực thi trong phiên làm việc.
Cú pháp:
hash [-l] [-r] [-p pathname] [-d] [-t] [command_name . . .]
Cú pháp trên được sử dụng để xác định và ghi nhớ đường dẫn đầy đủ của mỗi command_name
. Nếu không có đối số nào được cung cấp, nó sẽ hiển thị thông tin về các lệnh đã sử dụng trước đó và vị trí của chúng.
Tùy chọn (Options):
Lựa chọn | Miêu tả |
---|---|
-d | Quên vị trí lưu của command_name . |
-l | Hiển thị thông tin có thể sử dụng lại như đầu vào cho một chương trình khác. |
-p | Sử dụng pathname như đường dẫn đầy đủ của command_name . |
-r | Quên tất cả các vị trí đã nhớ. |
-t | In ra vị trí đã nhớ của từng command_name . Nếu có nhiều command_name , liệt kê trước mỗi vị trí tương ứng với nó. |
command_name | Mỗi command_name được chỉ định sẽ được tìm kiếm trong biến môi trường đường dẫn, và nếu tìm thấy, sẽ được thêm vào danh sách các lệnh đã nhớ. |
Exit Status
Lệnh hash trả về giá trị ‘0’ để thể hiện thành công. Giá trị khác không báo hiệu rằng command_name không được tìm thấy hoặc đã được đưa ra một tùy chọn không hợp lệ.
Liệt kê Bash Hash Table
Chúng ta có thể hiển thị Hash Table cho phiên làm việc hiện tại bằng cách gọi lệnh hash mà không có bất kỳ đối số nào.
hash
Đầu ra sẽ là
Ở đây, lệnh hash hiển thị số lần gọi (số lần thực thi cho lệnh đó) và lệnh với đường dẫn của nó trong phiên làm việc hiện tại. Tổng số lần gọi cho tất cả các lệnh được lưu lại được coi là số lần tìm kiếm đã tiết kiệm được qua đường dẫn.
Lưu ý – Nếu một phiên làm việc mới được mở ra mà trong đó không có lệnh nào được thực thi, thì sẽ không có Hash Tablecho phiên đó. Kết quả đầu ra sẽ nhìn như thế này:
Nếu chúng ta sử dụng tùy chọn -l, thì nó sẽ hiển thị một Hash Table theo định dạng có thể được sử dụng làm đầu vào.
hash -l
Chúng ta cũng có thể in ra các vị trí đã ghi nhớ của các lệnh được sử dụng trong phiên làm việc bằng cách sử dụng tùy chọn -t.
Chúng ta cũng có thể in ra vị trí của nhiều lệnh cách nhau bằng khoảng trắng, ví dụ:
Thêm đường dẫn và tên lệnh vào Bash Hash Table
Chúng ta có thể thêm các mục vào Hash Table mà có thể được sử dụng lại trong terminal. Nên nhớ rằng Hash Table chỉ tồn tại trong phiên làm việc hiện tại của terminal. Nếu chúng ta mở một terminal mới, Bash sẽ tạo một Hash Table mới theo các lệnh được thực thi của terminal đó.
Ngay khi chúng ta bắt đầu chạy lệnh đầu tiên, bash bắt đầu tạo một Hash Table. Để thêm một lệnh vào Hash Table, chúng ta có thể sử dụng tùy chọn -p theo sau là đường dẫn và sau đó là tên. Như vậy, chúng ta có thể sử dụng Hash Table tương tự như một alias. Dưới đây là một ví dụ, trong đó chúng ta đã thêm tập lệnh /home/bash.sh vào Hash Table với tên ‘bash’.
Sau khi đã thêm /home/bash.sh vào bảng hash với tên gọi được đặt là ‘bash’, chúng ta có thể gọi trực tiếp nó bằng tên ‘bash’:
Bash kiểm tra Hash Table để tìm chương trình thực thi với tên lệnh. Thông thường, không cần thiết phải đặt tập lệnh trong biến môi trường path trừ khi chúng ta muốn nó được sử dụng trong một phiên shell mới.
Xóa một mục từ Hash Table Chúng ta cũng có một tùy chọn để xóa hoặc quên vị trí được nhớ của các lệnh trong Hash Table của bash. Chúng ta có thể đơn giản sử dụng tùy chọn -d tiếp theo là tên để thực hiện nhiệm vụ này:
Ở đây, chúng ta đã xóa /home/bash.sh khỏi hash table, được ánh xạ với tên là ‘bash’.
Xóa Hash Table
Để xóa Hash Table, chúng ta có thể sử dụng tùy chọn -r.
Ở đây, có thể thấy rằng Hash Table (hash table) đã được xóa thành công bằng cách sử dụng tùy chọn -r.