ทำไม shell builtins ถึงไม่มี man page ที่เหมาะสม?


32

shell builtins ทั้งหมดแชร์หน้าคู่มือเดียวกัน:

BUILTIN(1)                BSD General Commands Manual               BUILTIN(1)

NAME
     builtin, !

เป็นต้น

จากนั้นมีข้อความเล็กน้อยอธิบายว่าเชลล์บิวด์อินคืออะไรจากนั้นรายการที่มีลักษณะดังนี้:

  Command       External    csh(1)    sh(1)
       !             No          No        Yes
       %             No          Yes       No

แต่ถ้าเราทำเช่นนั้นman grepเราจะได้ส่วนต่าง ๆ เช่น

  • เป็นโรคจิต
  • ประวัติศาสตร์
  • ดูสิ่งนี้ด้วย
  • มาตรฐาน
  • ลักษณะ

เป็นต้น

shell shell ไม่ได้มีประวัติคำอธิบายและการโต้แย้งเหมือน-Aหรือ-r? เหตุใดจึงไม่จัดทำไว้ในหน้าคู่มือและฉันจะเรียนรู้การใช้งานอย่างถูกต้องและมีประสิทธิภาพได้อย่างไร


คำตอบ:


25

เพราะบิวอินเป็นส่วนหนึ่งของเปลือก ข้อบกพร่องหรือประวัติใด ๆ ที่พวกเขามีข้อบกพร่องและประวัติของเปลือกตัวเอง คำสั่งเหล่านี้ไม่ใช่คำสั่งอิสระและไม่มีอยู่นอกเชลล์ที่สร้างขึ้น

คำสั่งเทียบเท่าสำหรับbashอย่างน้อยคือhelpคำสั่ง ตัวอย่างเช่น:

$ help while
while: while COMMANDS; do COMMANDS; done
    Execute commands as long as a test succeeds.

    Expand and execute COMMANDS as long as the final command in the
    `while' COMMANDS has an exit status of zero.

    Exit Status:
    Returns the status of the last command executed.

bash builtins ทั้งหมดมีhelpหน้า แม้แต่helpตัวมันเอง:

$ help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.

    Displays brief summaries of builtin commands.  If PATTERN is
    specified, gives detailed help on all commands matching PATTERN,
    otherwise the list of help topics is printed.

    Options:
      -d    output short description for each topic
      -m    display usage in pseudo-manpage format
      -s    output only a short usage synopsis for each topic matching
        PATTERN

    Arguments:
      PATTERN   Pattern specifiying a help topic

    Exit Status:
    Returns success unless PATTERN is not found or an invalid option is given.

แรงบันดาลใจจากsedสคริปต์ของ @ mikeserv นี่เป็นฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่จะพิมพ์ส่วนที่เกี่ยวข้องของ man page โดยใช้ Perl เพิ่มบรรทัดนี้ในไฟล์เริ่มต้นของเชลล์ ( ~/.bashrcสำหรับ bash):

manperl(){ man "$1" | perl -00ne "print if /^\s*$2\b/"; }

จากนั้นคุณเรียกใช้งานโดยให้มันเป็น man page และชื่อของส่วน:

$ manperl bash while
       while list-1; do list-2; done
       until list-1; do list-2; done
              The while command continuously executes the list list-2 as long as the last command in the list list-1 returns an exit
              status of zero.  The until command is identical to the while command, except that the test is negated; list-2 is  exe‐
              cuted  as  long  as the last command in list-1 returns a non-zero exit status.  The exit status of the while and until
              commands is the exit status of the last command executed in list-2, or zero if none was executed.

$ manperl grep SYNOPSIS
SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

$ manperl rsync "-r"
       -r, --recursive
              This tells rsync to copy directories recursively.  See also --dirs (-d).

2
@DisplayName พวกเขามีการทุบตี พวกเขาเป็นส่วนหนึ่งของมันและใช่พวกเขาจะอธิบายในSHELL BUILTIN COMMANDSส่วนของbashหน้าคน "หน้าคน" help builtin_nameของพวกเขา
terdon

3
สิ่งที่ไม่ชัดเจนคือเหตุผลที่พวกเขาไม่ได้รับหน้าคน หน้า Man เป็นเพียงไฟล์ใน MANPATH พวกเขาไม่จำเป็นต้องสอดคล้องกับไบนารีแยกกัน ในหลักการไม่มีเหตุผลว่าทำไมทุบตีจึงไม่สามารถส่งไปพร้อมกับ man pages สำหรับ builtins ของมัน - แทนที่จะมีระบบช่วยเหลือภายใน
ฟรานซิสดาวี่

4
@FrancisDavey: แต่มีบิวอินส่วนใหญ่อยู่ (มีนามสกุลต่างกัน) ในเชลล์ต่าง ๆ Manpages ไม่เฉพาะเชลล์ พวกเขาทั้งระบบ
rici

2
@FrancisDavey อย่างที่ rici บอกไว้, คำสั่งไม่ได้มีทั้งระบบ มันอาจจะเป็นความเข้าใจผิดเล็กน้อยที่จะมี manpage สำหรับคำสั่งที่ไม่มีอยู่ในทุกเชลล์ แต่ยิ่งแย่กว่านั้นมันจะสับสนมากที่จะมี man page สำหรับคำสั่งที่มีอยู่ในเชลล์หลายตัว แต่ทำงานแตกต่างกัน (เช่น ยอมรับการขัดแย้งที่แตกต่างกันมีไวยากรณ์ที่แตกต่างกัน ฯลฯ )
Joshua Taylor

1
@mikeserv แต่ผมจะยินดีต้อนรับหน้าคนสำหรับ builtins เปลือกตามสายของสิ่งเช่นข้อเสนอคอมไพล์ที่นำขึ้นหน้าคนสำหรับman git commit git-commitสิ่งที่ต้องการman bash ifจะเป็นที่ยอดเยี่ยม
Joshua Taylor

5

ขณะที่มันเป็นความจริงที่บาง builtins เปลือกอาจจะมีเพียงการแสดงในที่สมบูรณ์คู่มือ - โดยเฉพาะอย่างยิ่งสำหรับผู้ที่bashbuiltins -specific ว่าคุณเพียง แต่มีแนวโน้มที่จะใช้งานบนระบบ GNU (GNU folks ที่เป็นกฎที่ไม่เชื่อในmanและ ชอบinfoหน้าของตนเอง) - ยูทิลิตี้ POSIX ส่วนใหญ่ - เชลล์บิลด์หรืออื่น ๆ - แสดงได้อย่างดีในคู่มือโปรแกรมเมอร์ POSIX

นี่คือข้อความที่ตัดตอนมาจากด้านล่างของฉันman sh (ซึ่งอาจมีความยาว 20 หน้าหรือมากกว่านั้น ... )

ป้อนคำอธิบายรูปภาพที่นี่

ทุกคนที่อยู่ที่นั่นและอื่น ๆ ที่ไม่ได้กล่าวถึงเช่นset, read, break... ดีฉันไม่ต้องการที่จะตั้งชื่อพวกเขาทั้งหมด แต่ให้สังเกต(1P)ที่ด้านล่างขวา - มันหมายถึง POSIX หมวดหมู่ 1 ชุดคู่มือ - เหล่านี้คือmanหน้าที่ฉันพูดถึง

อาจเป็นได้ว่าคุณเพียงแค่ต้องติดตั้งแพคเกจ? สิ่งนี้ดูมีแนวโน้มสำหรับระบบเดเบียน ในขณะที่helpมีประโยชน์หากคุณสามารถหามันได้คุณควรจะได้POSIX Programmer's Guideซีรี่ย์นั้น มันจะมีประโยชน์มาก และมันเป็นหน้าองค์ประกอบที่มีรายละเอียดมาก

นอกจากนั้นเชลล์บิวด์อินจะแสดงรายการอยู่เสมอในส่วนเฉพาะของคู่มือเชลล์เฉพาะ zshตัวอย่างเช่นมีmanหน้าแยกทั้งหมดสำหรับเรื่องนั้น - (ฉันคิดว่าหน้านี้มีทั้งหมด 8 หรือ 9 zshหน้าแต่ละหน้า - zshallซึ่งมีขนาดใหญ่มาก)

แน่นอนคุณสามารถgrep man:

man bash 2>/dev/null | 
grep '^[[:blank:]]*read [^`]*[-[]' -A14

   read [-ers] [-a aname] [-d  delim]  [-i  text]  [-n
   nchars]  [-N  nchars]  [-p prompt] [-t timeout] [-u
   fd] [name ...]
          One line is read from the standard input, or
          from  the  file descriptor fd supplied as an
          argument to the -u  option,  and  the  first
          word is assigned to the first name, the sec‐
          ond word to the second name, and so on, with
          leftover words and their intervening separa‐
          tors assigned to the last  name.   If  there
          are  fewer  words read from the input stream
          than names, the remaining names are assigned
          empty  values.   The  characters  in IFS are
          used to split the line into words using  the
          same  rules  the  shell  uses  for expansion

... ซึ่งค่อนข้างใกล้เคียงกับที่ฉันเคยทำเมื่อค้นหาmanหน้าเชลล์ แต่helpค่อนข้างดีในbashกรณีส่วนใหญ่

ฉันได้ทำงานกับsedสคริปต์เพื่อจัดการกับสิ่งประเภทนี้เมื่อเร็ว ๆ นี้ มันเป็นวิธีที่ฉันคว้าส่วนในภาพด้านบน มันยังคงนานกว่าที่ฉันชอบ แต่มันก็ปรับปรุง - และอาจเป็นประโยชน์ได้ ในการวนซ้ำปัจจุบันมันน่าจะทำการแยกส่วนที่ไวต่อบริบทของข้อความออกมาอย่างน่าเชื่อถือตรงกับส่วนหรือหัวข้อย่อยตามรูปแบบ [a] รูปแบบ [s] ที่กำหนดไว้ในบรรทัดคำสั่ง มันเป็นสีเอาท์พุทและพิมพ์เพื่อ stdout

มันทำงานโดยการประเมินระดับการเยื้อง โดยทั่วไปแล้วบรรทัดอินพุตที่ไม่ว่างจะถูกละเว้น แต่เมื่อพบบรรทัดว่างก็จะเริ่มให้ความสนใจ มันรวบรวมเส้นจากที่นั่นจนกว่าจะได้รับการตรวจสอบว่าลำดับปัจจุบันเยื้องแน่นอนกว่าในบรรทัดแรกของมันก่อนที่จะเกิดขึ้นบรรทัดว่างอื่นหรือมิฉะนั้นมันจะลดลงด้ายและรอว่างเปล่าต่อไป หากการทดสอบประสบความสำเร็จจะพยายามจับคู่สายรอเทียบกับ args ของบรรทัดคำสั่ง

ซึ่งหมายความว่าการแข่งขันรูปแบบจะตรงกับ:

heading
    match ...
    ...
    ...
        text...

..และ..

match
   text

..แต่ไม่..

heading
    match
    match

    notmatch

..หรือ..

         text

         match
         match
         text

         more text

หากสามารถจับคู่ได้มันจะเริ่มพิมพ์ มันจะตัดช่องว่างนำของบรรทัดที่ตรงกันจากทุกบรรทัดที่พิมพ์ - ดังนั้นไม่ว่าระดับเยื้องจะพบว่าเส้นที่อยู่บนนั้นพิมพ์ออกมาราวกับว่ามันอยู่ที่ด้านบน มันจะพิมพ์ต่อไปจนกว่าจะพบกับอีกบรรทัดหนึ่งในระดับที่เท่ากันหรือน้อยกว่าเยื้องกว่าบรรทัดที่จับคู่ดังนั้นส่วนทั้งหมดจะถูกจับคู่กับหัวเรื่องการจับคู่รวมถึงส่วนย่อย / ทั้งหมดย่อหน้าที่อาจมี

ดังนั้นโดยทั่วไปถ้าคุณขอให้จับคู่กับรูปแบบมันจะทำเฉพาะกับหัวเรื่องหัวเรื่องบางชนิดและจะระบายสีและพิมพ์ข้อความทั้งหมดที่พบภายในส่วนที่นำหน้าด้วยการจับคู่ของมัน ไม่มีสิ่งใดถูกบันทึกเช่นเดียวกับสิ่งนี้ยกเว้นการเยื้องบรรทัดแรกของคุณ - และเพื่อให้สามารถทำงานได้อย่างรวดเร็วและจัดการ\nอินพุต ewline ที่แยกจากกันได้ทุกขนาด

ฉันใช้เวลาพอสมควรที่จะคิดวิธีการย่อส่วนย่อยเป็นแบบต่อไปนี้:

Section Heading
    Subsection Heading

แต่ฉันก็แยกออกในที่สุด

แต่ฉันก็ต้องทำใหม่ทั้งหมดเพื่อประโยชน์ของความเรียบง่าย แต่ ในขณะที่ก่อนที่ฉันจะมีลูปเล็ก ๆ หลายแห่งที่ทำสิ่งเดียวกันโดยส่วนใหญ่ในวิธีที่แตกต่างกันเล็กน้อยเพื่อให้สอดคล้องกับบริบทของพวกเขาโดยการเปลี่ยนวิธีการเรียกซ้ำของฉันฉันจัดการเพื่อไม่ให้ซ้ำรหัสส่วนใหญ่ ขณะนี้มีสองลูป - หนึ่งพิมพ์และหนึ่งเยื้องการตรวจสอบ ทั้งสองขึ้นอยู่กับการทดสอบเดียวกัน - ลูปการพิมพ์เริ่มต้นเมื่อการทดสอบผ่านและการเยื้องวงจะใช้เวลามากกว่าเมื่อมันล้มเหลวหรือเริ่มในบรรทัดว่าง

กระบวนการทั้งหมดนั้นเร็วมากเพราะส่วนใหญ่มันจะ/./dทำการลบบรรทัดที่ไม่ว่างเปล่าและเลื่อนไปยังบรรทัดถัดไป - แม้ผลลัพธ์จากการzshallเติมหน้าจอทันที สิ่งนี้ไม่เปลี่ยนแปลง

อย่างไรก็ตามมันมีประโยชน์มากจนถึงขณะนี้ ตัวอย่างเช่นreadสิ่งต่าง ๆ ข้างต้นสามารถทำได้เช่น:

mansed bash read

... และมันก็ได้บล็อกทั้งหมด มันสามารถใช้รูปแบบหรืออะไรก็ได้หรือหลายอาร์กิวเมนต์แม้ว่าหน้าแรกจะเป็นmanหน้าเว็บที่ควรค้นหาเสมอ นี่คือรูปภาพของผลลัพธ์บางส่วนหลังจากที่ฉันทำ:

mansed bash read printf

ป้อนคำอธิบายรูปภาพที่นี่

... ทั้งบล็อกถูกส่งคืนทั้งหมด ฉันมักจะใช้มันเหมือน:

mansed ksh '[Cc]ommand.*'

... ซึ่งมันมีประโยชน์มาก การSYNOPS[ES]ทำให้มันมีประโยชน์จริงๆ:

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือถ้าคุณต้องการที่จะให้มันหมุน - ฉันจะไม่โทษคุณถ้าคุณไม่ได้

mansed() {
MAN_KEEP_FORMATTING=1 man "$1" 2>/dev/null | ( shift
b='[:blank:]' s='[:space:]' bs=$(printf \\b) esc=$(printf '\033\[') n='\
' match=$(printf "\([${b}]*%s[${b}].*\)*" "$@")
sed -n "1p
    /\n/!{  /./{    \$p;d
        };x;    /.*\n/!g;s///;x
    :indent
        /.*\n\n/{s///;x
        };n;\$p;
        /^\([^${s}].*\)*$/{s/./ &/;h;   b indent
        };x;    s/.*\n[^-[]*\n.*//; /./!x;t
        s/[${s}]*$//;   s/\n[${b}]\{2,\}/${n} /;G;h
    };
    #test
    /^\([${b}]*\)\([^${b}].*\n\)\1\([${b}]\)/!b indent
        s//\1\2.\3/
    :print
    /^[${s}]*\n\./{ s///;s/\n\./${n}/
        /${bs}/{s/\n/ & /g;
            s/\(\(.\)${bs}\2\)\{1,\}/${esc}38;5;35m&${esc}0m/g
            s/\(_${bs}[^_]\)\{1,\}/${esc}38;5;75m&${esc}0m/g
            s/.${bs}//g;s/ \n /${n}/g
            s/\(\(${esc}\)0m\2[^m]*m[_ ]\{,2\}\)\{2\}/_/g
        };p;g;N;/\n$/!D
        s//./;  t print
    };
    #match
        s/\n.*/ /;  s/.${bs}//g
        s/^\(${match}\).*/${n}\1/
        /../{   s/^\([${s}]*\)\(.*\)/\1${n}/
        x;  s//${n}\1${n}. \2/; P
    };D
");}

สั้น ๆ เวิร์กโฟลว์คือ:

  • บรรทัดใด ๆ ที่ไม่ว่างเปล่าและไม่มี\nอักขระ ewline จะถูกลบออกจากเอาต์พุต
    • \nอักขระ ewline ไม่เคยเกิดขึ้นในพื้นที่รูปแบบการป้อนข้อมูล พวกเขาสามารถเป็นผลมาจากการแก้ไขเท่านั้น
  • :printและ:indentเป็นทั้งลูปปิดซึ่งกันและกันและเป็นวิธีเดียวที่จะได้รับ\newline
    • :printวนรอบของวนรอบเริ่มต้นถ้าตัวอักษรนำในบรรทัดเป็นชุดของช่องว่างตามด้วย\nอักขระ ewline
    • :indentรอบของเริ่มต้นที่บรรทัดว่าง - หรือบน:printเส้นรอบที่ล้มเหลว#test- แต่:indentลบ\nลำดับ+ ewline นำที่ว่างทั้งหมดออกจากเอาต์พุต
    • เมื่อ:printเริ่มต้นมันจะดึงเส้นอินพุตต่อไปดึงแถบพื้นที่ว่างออกไปจนถึงจำนวนที่พบในบรรทัดแรกในวัฏจักรของมันแปลส่วนที่เกินและทำความเข้าใจ backspace escapes ลงในช่องสีที่หนีออกมาและพิมพ์ผลลัพธ์จนกว่าจะ#testล้มเหลว
    • ก่อนที่จะ:indentเริ่มต้นมันเป็นครั้งแรกการตรวจสอบhพื้นที่เก่าต่อเนื่องเยื้องไปได้ใด ๆ(เช่นย่อยก)และจากนั้นยังคงที่จะดึงในการป้อนข้อมูลตราบใดที่#testล้มเหลวและสายการใด ๆ [-ต่อไปนี้เป็นครั้งแรกที่จะมีการแข่งขันอย่างต่อเนื่อง เมื่อบรรทัดหลังจากบรรทัดแรกไม่ตรงกับรูปแบบนั้นจะถูกลบ - และต่อมาดังนั้นจะมีทุกบรรทัดต่อไปนี้จนกระทั่งบรรทัดว่างถัดไป
  • #matchและ#testสะพานทั้งสองวงปิด
    • #testผ่านเมื่อซีรีย์นำของช่องว่างนั้นสั้นกว่าซีรีย์ตามด้วย\newline สุดท้ายในลำดับบรรทัด
    • #matchเพิ่ม\newlines ชั้นนำที่จำเป็นในการเริ่ม:printวงจรไปยัง:indentลำดับเอาต์พุตใด ๆ ของซึ่งนำไปสู่การจับคู่กับ ARG บรรทัดคำสั่งใด ๆ ลำดับผู้ที่ไม่ได้มีการแสดงผลที่ว่างเปล่า - :indentและที่เกิดบรรทัดว่างจะถูกส่งกลับไปยัง

2
sed-fu ของคุณแข็งแกร่ง แน่นอนคุณสามารถทำสิ่งเดียวกันกับmanperl(){ man $1 | perl -00ne "print if /^\s*$2\b/"; }แล้วmanperl sh SYNOPSISหรือmanperl sh read:)
terdon

@terdon - ไม่คุณทำไม่ได้ นี่ไม่กินอินพุต ฉันสามารถทำสิ่งเดียวกับที่ชอบsed 'H;$!d;g;s/\(\(\n *\)match\([^\n]*\)\2 \)\{1,\}\)*.\{,1\}/\1/g'... อาจเป็นไปได้ว่า ... แต่ต้องกลืนไฟล์และแยกมันทั้งหมดในครั้งเดียว สิ่งนี้ใช้ได้ในกระแส - มันสามารถจัดการอินพุตได้ทุกขนาดโดยที่เส้นไม่ยาวนักดาราศาสตร์ มันพิมพ์ที่ทำงาน - และมันจะแยกวิเคราะห์ทั้งหมดของman's \backslash หนีบูต แต่manเป็นเพียงแอปพลิเคชันเดียวสำหรับมัน - ฉันใช้มันกับปัญหาอื่น ๆ เช่นกัน ...
mikeserv

1
ฉันแค่โยนโซ่ของคุณเพราะฉันสามารถทำสิ่งที่คุณอธิบายด้วยซับเล็ก ๆ อย่างไรก็ตามโปรดทราบว่ามันไม่ได้กลืนไฟล์ทั้งหมดมันทำงานในกระแส เพียงแค่กำหนด "บรรทัด" ที่ใช้\n\nแทน\nแต่ยังคงสามารถจัดการอินพุตขนาดใดก็ได้และพิมพ์ได้ตามที่ใช้งานอยู่ ดู "โหมดย่อหน้า" ที่นี่: perldoc.perl.org/perlrun.html
terdon

@terdon อาจเป็นวิธีที่ดีกว่าที่จะไปที่นี่ ในก็สามารถทำได้เช่น:sed '/./{H;$!d' -e '};x;now work the paragraph...'ฉันมักจะทำเช่นนั้นเช่นกัน แต่เดิมฉันเขียนส่วนแรกสำหรับการดูบันทึกการใช้ชีวิตเป็นเวลาไม่ จำกัด จำนวนและแม้กระทั่งพฤติกรรมที่ไม่แน่นอน - บัฟเฟอร์สามารถระเบิดได้ภายใต้เงื่อนไขบางอย่าง ขนาดนี้มีเพียงครึ่งเดียว - manทำให้หนักขึ้น ฉันดูman -Hหลังจากที่ได้รับการmanซิงก์ข้างต้นแล้วและฉันคิดว่ามันอาจจะง่ายกว่าที่จะทำงานกับ HTML ที่เขียนด้วยเครื่องซึ่ง groff สามารถพิมพ์บนระบบ GNU ได้ ฉันนะข้อศอกลึกแล้ว thoug
mikeserv

@terdon - ฉันเดาตัวเองเป็นครั้งที่สองแล้วลองใช้วิธีที่เน้นย่อหน้าเป็นหลัก แต่มันก็ง่ายกว่า สิ่งนี้ได้รับส่วน กด Like mansed cmd DESCRIPTIONส่วนของ DESCRIPTION - และส่วนที่รวมทั้งหมด การค้นหาที่ตรงกันจะถูกพิมพ์ทั้งหมดและราวกับว่าระดับการเยื้องของมันนั้นเป็นอันดับหนึ่ง มันข้ามการตั้งค่าผิด ๆ โดยไม่สนใจย่อหน้าที่ตรงกัน แต่ไม่ต้องเยื้องเข้าไปอีก มันจับคู่กับ args ผ่านทาง backspace colours และไม่จัดการกับมันจนกว่ามันจะพร้อมพิมพ์บรรทัดแน่นอน ทั้งหมดนี้เป็นเรื่องยากสำหรับฉันที่จะทำกับข้อมูลมากกว่าบรรทัดเดียวในแต่ละครั้ง
mikeserv

1

แต่ละเชลล์มีชุดบิวอินของตัวเอง ในขณะที่มี commonalities พวกเขาแต่ละคนมีลักษณะของตัวเองที่ต้องมีเอกสาร

บนระบบเช่น Linux และ FreeBSD (และ OSX ซึ่งสืบทอดมาจาก FreeBSD) ที่แต่ละเชลล์มีให้เป็นแพ็คเกจแยกต่างหากไม่มี man page สำหรับ builtins; แต่ละบิลด์ในตัวจะถูกบันทึกไว้ในหน้า man ของเชลล์ ดังนั้นอ่าน bash man page สำหรับเอกสารของkillbuiltin ของ bash อ่าน dash man page สำหรับเอกสารของ dashin ของkillbuiltin ฯลฯ นอกจากนี้ยังมี man page สำหรับkillยูทิลิตี้แบบสแตนด์อโลน

ดูฉันจะได้รับหน้าคนสำหรับคำสั่ง bash builtin? สำหรับmanฟังก์ชั่นที่แสดงเอกสารภายในของ bash แทนที่จะเป็น man page หากอาร์กิวเมนต์เป็นชื่อของ builtin

มีตัวแปรยูนิกซ์ที่จัดทำ man page สำหรับเชลล์บิวด์อิน - ในความเป็นจริงตัวแปรเชิงพาณิชย์ส่วนใหญ่ทำ มันเป็นไปได้เพราะระบบมาพร้อมกับเชลล์เดี่ยวหรือชุดของเชลล์ที่รู้จัก man page อธิบายความแตกต่างระหว่าง shells ยกตัวอย่างเช่นfg(1)หน้าคนบน Solaris 10มีส่วนสำหรับsh, และksh หน้าคนบน AIX 7.1การอ้างอิง“เปลือกกร” และ“POSIX เปลือก” แต่กล่าวถึงพวกเขาร่วมกัน (พวกเขาเกิดขึ้นเพื่อสนับสนุนว่าคุณสมบัติเดียวกัน) หน้าคนบน Tru64 5.0กล่าวถึง builtin ksh และหมายถึงผู้ใช้ csh กับหน้าคน SCOcshfg(1)fgfg(1)csh(1)เห็นได้ชัดว่ามาพร้อมกับกระสุนเดี่ยว คุณสามารถติดตั้งเชลล์อื่นเป็นแพ็คเกจเสริมบนระบบปฏิบัติการเหล่านี้ หากคุณใช้เชลล์แบบกำหนดเองคุณต้องจำไว้ว่า man page ของบิวด์อินจะไม่เกี่ยวข้องเมื่อใช้เชลล์ที่ไม่ใช่ค่าเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.