Làm thế nào để làm cho `man` hoạt động cho các lệnh và từ khóa dựng sẵn shell?


56

Tôi sử dụng manlệnh mọi lúc khi tôi muốn nhận thông tin về một lệnh cụ thể. Nhưng điều này không giúp tôi quá nhiều khi lệnh cụ thể đó là một shell dựng sẵn. Ví dụ:

man cd

trả về:

No manual entry for cd

Câu hỏi của tôi là: nó có thể làm mancũng làm việc cho tất cả các lệnh shell được xây dựng trong (như cd, alias, history, vv), và từ khóa (như if, while, [[, {, vv)?


Và làm thế nào đến echomột lệnh dựng sẵn nhưng có một trang người đàn ông?
Parto

5
@AvatarParto echocũng là một lệnh hệ thống (thực thi) được đặt trong /bin. Bạn có thể kiểm tra điều này bằng cách sử dụng type -a echo. Điều tương tự xảy ra với timevà có thể những người khác.
Radu Rădeanu

Bạn đã khám phá info bashchưa?
bbaassssiiee

Bạn luôn có thể viết các trang người đàn ông của riêng bạn .
Elliott Frisch

Câu trả lời:


66

Các helplệnh khi được sử dụng với -mtùy chọn có thể hiển thị thông tin về lệnh dựng sẵn trong định dạng pseudo-manpage. Ví dụ:

help -m cd | less

sẽ hiển thị thông tin về cdlệnh theo định dạng gần như chính xác trong trang thủ công.

Bắt đầu từ lệnh này, bạn có thể gói manlệnh trong một chức năng trong .bashrctệp của mình như sau:

man () {
    case "$(type -t -- "$1")" in
    builtin|keyword)
        help -m "$1" | sensible-pager
        ;;
    *)
        command man "$@"
        ;;
    esac
}

Sau này mancũng sẽ hoạt động cho tất cả các lệnh và từ khóa dựng sẵn shell. Ví dụ:

man :

sẽ hiển thị:

NAME
    : - Null command.

SYNOPSIS
    :

DESCRIPTION
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

SEE ALSO
    bash(1)

IMPLEMENTATION
    GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Cách tiếp cận rất thông minh! +1
phatskat

5
Nếu có các tệp thực thi được che bởi các nội trang, bạn có thể chỉ định phần. man timevs.man 1 time
Ngừng làm hại Monica

1
... lưu ý rằng mặc dù nếu bạn là zshngười dùng, bạn không may mắn như vậy: bug.launchpad.net/ubfox/+source/zsh/+orms/1242108 (không có trang man nào được cài đặt)
Rmano

info, help -mtại sao chúng ta không thể có những trang người đàn ông tốt trong những ngày này? Dù sao cũng cảm ơn!
Tor Klingberg

+1 ... tốt đẹp! Hành vi của chức năng yr giống như phần nào những gì xảy ra thông qua quá tải chức năng trong C / C ++ ... Chỉ tò mò man typekhông tạo ra mô tả về các tùy chọn "-a" hoặc "-t" trong Ubuntu 14.04.4 .... và tuy nhiên, chúng đang ở đó
Cbhihe

28
man bash-builtins

Điều này chứa các đoạn trợ giúp cho các lệnh dựng sẵn, mặc dù ở định dạng cô đọng hơn một chút so với helptương đương.


Tốt để biết! Đó là từ phần 7 của hướng dẫn. Tôi đã không nghe về trang hướng dẫn này cho đến bây giờ. +1, nhưng tôi không thể chấp nhận câu trả lời này vì đó không chính xác là những gì tôi đã hỏi.
Radu Rădeanu

Trên macOS High Sierra, lệnh đó chỉ đơn giản là "man dựng"
Tony Barganski

13

Bạn có thể cài đặt các trang thủ công về việc sử dụng hệ thống POSIX để phát triển như,

sudo apt-get install manpages-posix-dev

Nó sẽ cung cấp các trang man cho các nội dung shell.

$ type cd
cd is a shell builtin

Bây giờ cố gắng,

$ man cd
CD(P)                      POSIX Programmer's Manual                      CD(P)

NAME
   cd - change the working directory

SYNOPSIS
   cd [-L | -P] [directory]


...

3
Tôi đã chờ đợi ai đó đến với câu trả lời này. Nhưng vấn đề là điều này sẽ chỉ hoạt động đối với một số nội dung - những thứ được chỉ định bởi POSIX .
Radu Rădeanu

3
Bash không tuân thủ nghiêm ngặt POSIX trừ khi chạy ở chế độ POSIX, vì vậy các trang hướng dẫn này có thể không toàn diện và có thể sai trong một số trường hợp, đặc biệt là khi mô tả hành vi của một số tính năng nhất định.
Chris Down

@ RaduRădeanu vâng, bạn hoàn toàn chính xác, nó sẽ hoạt động đối với một số nội trang.
souravc

3

Giải pháp này hoạt động hoàn toàn tốt nhưng cũng là một trò đùa vì điều đầu tiên tôi nghĩ khi đọc câu hỏi của bạn là 'Ai vẫn thực sự sử dụng con người từ dòng lệnh? Không phải tất cả mọi người chỉ cần Google trang người đàn ông họ muốn (để họ có được những thứ ưa thích như cuộn không giới hạn)? '. Sau đó, tôi nhận ra rằng các trang web tôi Google thường có cả hai loại lệnh, vậy tại sao không sử dụng chúng để cung cấp giao diện trang thống nhất cho tất cả các lệnh. Do đó, niềm vui này đã được sinh ra.

Điều này đòi hỏi phải có kết nối Internet cho bất kỳ mục nào bạn chưa tìm kiếm ít nhất một lần. Nó cũng cần hai ứng dụng nhỏ bị thiếu trong bản cài đặt mặc định của Ubuntu:

 sudo apt-get install tidy html2text

Những thứ này không thực sự cần thiết nhưng chúng giúp làm cho nó trông đẹp hơn một chút. Tidy sẽ dọn dẹp HTML và html2text sẽ định dạng html đó dưới dạng văn bản được định dạng (thường khá tầm thường vì hầu hết các trang web này đã được định dạng văn bản và chỉ được bọc trong các thẻ <pre>.

Bây giờ tất cả những gì bạn cần làm là thêm phần này vào cuối ~/.profile:

function iman() {
    if [ ! -d "/usr/share/iman" ]; then
        sudo mkdir -m a=rwx /usr/share/iman
    fi
    if [ ! -f "/usr/share/iman/$1.html" ]; then
        curl "http://unixhelp.ed.ac.uk/CGI/man-cgi?$1"| tidy -n -asxml 2>/dev/null| html2text > "/usr/share/iman/$1.html"; 
    fi
    if [ -f "/usr/share/iman/$1.html" ]; then
        cat "/usr/share/iman/$1.html";
    else
        echo "Entry not found."
    fi
}

Sau khi bạn đăng xuất và sau đó quay lại, bạn sẽ có thể nhập này:

iman cd

và nó sẽ hiển thị trang man cho cd.

Điều này sử dụng một thư mục dữ liệu (/ usr / share / iman) để giảm thiểu các yêu cầu mạng của chúng tôi (vì vậy nó sẽ hoạt động cho các mục bạn đã tìm thấy trước cả khi không có kết nối; cũng để giảm thiểu tải trên trang web linux linux ngẫu nhiên này Tôi tìm thấy với các mục hệ thống mà chúng tôi muốn trong đó là tốt). Nếu bạn không sử dụng cái này nữa, bạn sẽ muốn loại bỏ nó để phục hồi dung lượng đĩa.

Hy vọng, phần còn lại là khá thẳng về phía trước.


6
'Ai vẫn thực sự sử dụng con người từ dòng lệnh?' Tôi! và mọi người khác phải truy cập một trung tâm dữ liệu (không có internet;))
Rinzwind

Quan điểm, điều này sẽ không giúp bạn sau đó được rõ ràng.
krowe

6
Tôi sẽ nghĩ ngược lại, tôi hiếm khi sử dụng Google để tra cứu các lệnh bash. Nó nhanh hơn rất nhiều khi chỉ cần gõ "lệnh man" mà không phải rời khỏi bàn phím.
laurent

alt + tab -> alt + d -> lệnh sẽ làm tương tự mà không cần chuột và không hủy lệnh cli hiện tại và với cuộn và với hàng triệu thứ hay ho khác mà trình duyệt cung cấp cho bạn. Tôi chắc chắn bạn sẽ không biết gì về điều đó bởi vì dù sao bạn cũng sử dụng trang này và những người khác thích nó từ lynx ... ffs
krowe

Trong trường hợp tích hợp, imanhàm của bạn trả về cùng một đầu ra như man bash-builtins.
Radu Rădeanu
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.