Lệnh dựng sẵn làm gì trong bash?


35

Tôi biết lệnh dựng sẵn là gì, nhưng builtinbản thân nó làm gì? Thực hiện which lscho tôi thấy /bin/ls, nhưng thực hiện which builtintrả lại không có gì.

man builtinchỉ cho tôi một danh sách các lệnh dựng sẵn, một trong số đó là builtin. Phần còn lại của trang man giải thích nội dung là gì, nhưng không phải builtinlà gì .

builtin --helpnói với tôi builtin: usage: builtin [shell-builtin [arg ...]]nhưng vẫn không làm được gì.

Đây có phải là một phần của bash theo cách mà các lệnh dựng sẵn khác không?


3
Bạn quên mất help builtin.
Ignacio Vazquez-Abrams

3
which builtintrả về không có kết quả, bởi vì whichbáo cáo vị trí của các lệnh bên ngoài . Nếu bạn hỏi cái vỏ type builtin, nó sẽ cho bạn biết, không ngạc nhiên, điều đó builtin is a shell builtin. Bạn sẽ tìm thấy cùng với alias, setvv
Toby Speight

1
builtin help builtin
theonlygusti

Câu trả lời:


50

Các builtinlàm cho lệnh chắc chắn rằng bạn chạy vỏ tích hợp trong phiên bản của lệnh chứ không phải chạy lệnh khác có cùng tên.

Ví dụ: giả sử bạn đã xác định hàm shell có tên cdđể in một số trạng thái bổ sung mỗi khi bạn thay đổi thư mục. Nhưng bạn đã làm hỏng nó và bây giờ bạn không thể thay đổi thư mục chính xác. Vì vậy, bây giờ bạn có thể gõ builtin cd ~để cd thành công trở lại thư mục chính của bạn mà không chạy chức năng shell bị hỏng của bạn.

Và nhân tiện, bản sao của trang bash man của tôi có một phần gọi là "SHELL BUILTIN THÔNG TIN" và nó xác định ý nghĩa của builtinlệnh trong phần đó (được phiên âm bên dưới).

dựng sẵn shellin [đối số]

    Thực thi hàm dựng sẵn được chỉ định, truyền đối số và
    trả lại trạng thái thoát của nó. Điều này rất hữu ích khi xác định hàm
    có tên giống như vỏ dựng sẵn, giữ lại
    chức năng của nội dung trong hàm. Nội dung cd là
    thường được định nghĩa lại theo cách này.

    Trạng thái trả về là sai nếu shell-dựng không phải là vỏ dựng
    chỉ huy.

14
câu trả lời tốt đẹp. Nhưng làm cho tôi tự hỏi, làm thế nào bạn có thể chắc chắn rằng builtinlệnh là nội dung thực sự từ bash?
Pacopaco

14
@Pacopaco: Bạn không thể :-). Bạn cũng có thể ghi đè builtin: function builtin { echo "Hi from builtin :-)"; }. Sau đó builtinkhông còn hoạt động.
sleske

12
@Pacopaco, type builtinsẽ cho bạn biết liệu đó có phải là thật hay không builtin. Trừ khi typeđã được thay thế bằng một người không được xây dựng type...
Toby Speight

10
ồ ... thật không may người ta có thể: alias unset = "echo unset bị ghi đè"; alias alias = "echo alias bị ghi đè" ... Vì vậy, không có may mắn ở đây.
Olivier Dulac

8
Tôi thích cuộc thảo luận đang diễn ra này!
Sam Weaver
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.