ฉันจะค้นหาความช่วยเหลือสำหรับคำสั่งจุด '.' ใน * ระวังได้อย่างไร


21

ฉันต้องการความช่วยเหลือสำหรับคำสั่งจุด.เช่นใน. ./my_script.sh(ฉันหมายถึงจุดแรก)

ฉันได้พยายามแล้วที่จะพบหน้าคนที่ใช้และman . man \.ฉันจะแสดงหน้า man ที่อธิบายการใช้คำสั่งได้.อย่างไร


14
@ C0deDaedalus: ชื่อบัญญัติสำหรับ "." คือ FULL STOP สิ่งที่ผู้คนเรียกมันขึ้นอยู่กับว่าพวกเขาอยู่ที่ไหน
RedGrittyBrick

5
เพียงแค่วิ่ง:help .
kenorb

2
ในเอกสาร dotแต่ก็เรียกว่า ดูข้อกำหนดอย่างเป็นทางการได้ที่pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Charles Duffy

11
@jamesqf .เป็นคำสั่งโดยเฉพาะเชลล์บิวด์อิน sourceในทุบตีมันเทียบเท่ากับ
wjandrea

4
@jamesqf: .เป็น POSIX ไม่ใช่แค่ทุบตี เช่นยังอยู่ใน zsh และ ksh
MSalters

คำตอบ:


79

ก่อนอื่นคุณควรเรียกใช้type .คุณอาจจะได้รับ:

. is a shell builtin

Builtins เป็นส่วนหนึ่งของเชลล์คุณไม่มีหน้าคู่มือของตัวเอง บางคนก็อาจดูเหมือนจะมี แต่พวกเขาเช่นechoเป็น builtin ในทุบตี แต่ส่วนใหญ่มีแนวโน้มที่จะมีการปฏิบัติการที่แยกต่างหากเช่น/bin/echoในระบบของคุณและในกรณีนี้man echoหมายถึงหลัง ทั้งสองechoนี้อาจไม่เทียบเท่าอย่างเคร่งครัด

เปลือกของคุณอาจให้ข้อมูลเกี่ยวกับ builtin ผ่านhelpbuiltin; ลองhelp help, help typeและในที่สุด:

help .

Builtins อาจแสดงอยู่ในหน้าคู่มือของเชลล์ เช่น (ใน Debian ของฉัน) builtins ทุบตีถูกปกคลุมโดยตรงในman bashแต่สำหรับ builtins zsh บอกให้ผมวิ่งman zsh man zshbuiltinsโดยทั่วไปแล้วกระสุนอาจจะอธิบายได้หรือไม่


7
+1 สำหรับการชี้ว่า.เป็นเปลือกในตัวและนี้ควรจะทำเครื่องหมายเป็นคำตอบเพราะ OP how to find help for . in *nix ?ถาม
C0deDaedalus

7
+1 สำหรับการใช้type .เพื่อแสดงให้เห็นว่าบางคำสั่งเป็นเชลล์บิวด์อิน
Roger Lipscombe

1
ใน Debian ส่วนใหญ่ Bash builtins จะถูกแยกไปยังbash-builtins(1)หน้าคู่มือซึ่งมีขนาดที่สะดวกกว่า
Toby Speight

นอกจากนี้การเรียกใช้ "type" จะใช้งานได้เฉพาะในกรณีที่คุณใช้เชลล์ซึ่งมี builtin เป็น "type" หากคุณกำลังใช้ tcsh อยู่ให้พิมพ์ "" ให้ "type: ไม่พบคำสั่ง"
jamesqf

1
แม้. --helpทำงาน
Digital Trauma

25

ลองใช้man shหรือman bashหรือ man page สำหรับเชลล์ที่คุณใช้ (อาจจะman $SHELL)

นี่เป็นทางการไม่ได้เรียกว่าคำสั่ง "จุด" แต่sourceคำสั่ง การค้นหาคำsourceนั้นอาจมีประโยชน์

เช่นbash man page (ค้นหา "คำสั่ง builtin แต่ละคำสั่ง") และคุณจะพบเอกสารได้อย่างรวดเร็ว

สำหรับการอธิบายการใช้งานฉันสามารถทำสิ่งนี้ได้ที่นี่ ฉันเพิ่งจะอ้างถึงสิ่งนี้เป็นsourceคำสั่งตระหนักว่ามันสามารถยากที่จะเป็นระยะเวลาเมื่อคุณใช้เปลือกหอยบางและเปลือกบางที่คำสั่งอาจจะต้องมี (เพราะจุดอาจได้รับการยอมรับ แต่คำทั้งหมดsourceอาจไม่ จะ)

หากคุณใช้sourceคำสั่งเชลล์ของคุณจะอ่านแต่ละบรรทัดจากไฟล์สคริปต์และลองเรียกใช้งาน คุณต้องการสิทธิ์ "อ่าน" ในไฟล์ (ไม่สำคัญว่าคุณจะมีสิทธิ์ "ดำเนินการ") หากคุณแก้ไขตัวแปรนั่นมีแนวโน้มที่จะส่งผลต่อเชลล์ปัจจุบันของคุณ

หากในทางตรงกันข้ามคุณเพียงแค่พยายามรันไฟล์จากนั้นเชลล์ของคุณจะขอให้ระบบปฏิบัติการดูแลคำขอนี้ สิ่งนี้จะต้องได้รับอนุญาต "ดำเนินการ" (ในบางระบบเช่น OpenBSD คุณไม่จำเป็นต้องมีสิทธิ์ "อ่าน" สำหรับสิ่งนี้ในระบบอื่นรวมถึง Unix ที่คุณต้องการ) ไฟล์อาจต้องเริ่มต้นด้วยส่วนหัวที่เหมาะสม (เช่น#!/bin/sh) เพื่อการทำงาน ระบบรับรู้สิ่งนี้เป็นไฟล์สคริปต์ ระบบปฏิบัติการจะดำเนินการสำเนาของเชลล์ที่ร้องขอและบอกเชลล์นั้นให้เรียกใช้เนื้อหาของสคริปต์ หากสภาพแวดล้อมของเชลล์มีการเปลี่ยนแปลง (เช่นตัวแปรได้รับค่าใหม่ไดเรกทอรีการทำงานจะเปลี่ยนไป (ด้วย  cd) ตัวบ่งชี้ไฟล์จะถูกเปลี่ยนเส้นทาง (ด้วย exec) ฯลฯ ) มันจะส่งผลกระทบเฉพาะ sub-shell ที่ถูกเรียกใช้สำหรับสคริปต์และไม่สามารถแก้ไขสภาพแวดล้อมใน parent parent ที่เรียกว่า script file ได้


15
มันsourceอยู่ในทุบตีเท่านั้น ในข้อมูลจำเพาะ POSIX เรียกว่า "คำสั่ง dot" (และsourceไม่รองรับนามแฝง)
Charles Duffy

1
สคริปต์ต้องการสิทธิ์อ่านมิฉะนั้นล่ามไม่สามารถเข้าถึงได้ ดูสคริปต์สามารถใช้งานได้ แต่ไม่สามารถอ่านได้หรือไม่?
wjandrea

1
การเรียกใช้งานสคริปต์ไม่ได้เปิดเชลล์ย่อย แต่เป็นเพียงกระบวนการลูกปกติเช่นเดียวกับการเรียกใช้โปรแกรมรวบรวม ดูคำตอบนี้ใน "sub-shell เป็นสิ่งเดียวกันกับ child-shell หรือไม่"
wjandrea

1
ดังนั้นฉันจึงพิมพ์man bashแล้วอะไร/.? ไม่มีประโยชน์มาก /sourceจะเป็นประโยชน์ แต่สำหรับสิ่งที่คุณต้องรู้.และsourceเป็นสิ่งเดียวกัน
Joker_vD

1
ฉันพบย่อหน้าของคุณ "สำหรับการอธิบายการใช้ ... " ทำให้เข้าใจผิดเล็กน้อยเนื่องจากมันบอกเป็นนัยว่ามันอาจจะเป็น.และอาจเป็นไปได้sourceแต่ตามที่ @CharlesDuffy ได้กล่าวถึงไปแล้วมันมักจะอยู่ .ในเปลือกที่สอดคล้องกับ POSIX เสมอและมีนามแฝงsourceใน หนึ่งเปลือก
Tom Fenech

6

ไม่มีใครพูดถึงมันบ่อยครั้งที่มันถูกลืม

whatisเบาะแสที่ใหญ่ที่สุดของคุณจะมาจากคำสั่งที่เป็นประโยชน์

tim@musha ~ $ whatis .
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis source
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis bash
bash (1)             - GNU Bourne-Again SHell
tim@musha ~ $ whatis lynx
lynx (1)             - a general purpose distributed information browser for the World Wide Web
tim@musha ~ $ whatis linux
linux: nothing appropriate.
tim@musha ~ $ whatis whatis
whatis (1)           - display one-line manual page descriptions

แก้ไข:

บางคนชี้ให้เห็นในความคิดเห็นว่านี่ไม่ใช่ในการรบกวนบางอย่าง - อาจเป็นแพ็คเกจที่ติดตั้งได้หรือเปิดใช้งานวิธี - ฉันมีโดยค่าเริ่มต้นใน gentoo;)

มันรวมถึงสิ่งที่ยอดเยี่ยม - ซึ่งบอกให้คุณรู้ว่าไฟล์ใดที่เรียกใช้งานได้และที่ใดที่ให้พา ธ ทั้งหมดแก่คุณไปยังชื่อไฟล์ที่เรียกใช้งานได้


1
คำใบ้ที่ดี แต่ดูเหมือนว่ามันใช้ไม่ได้ทุกที่ ตัวอย่างเช่นใน AIX ที่มี ksh whatis .จะส่งคืนman: 0703-307 . is not found.
aturegano

4
whatis .ส่งคืนอะไรใน Ubuntu 16.04
Vadim Kotov

และ ".: ไม่มีอะไรเหมาะสม" บน OpenSuSE โดยใช้ tcsh
jamesqf

2
อ๊ะจากหน้า man ของตนเอง: "whatis - แสดงคำอธิบายหน้าด้วยตนเองในบรรทัดเดียว" ดังนั้นจึงดูเหมือนว่าเป็นรุ่นที่สั้นมากของมนุษย์
Xen2050

ตัวเลือกที่เข้ากันได้มากขึ้นอาจเป็น: apropos (ซึ่งควรจะเหมือนกับการใช้ "man -k") สำหรับ "." หรือ "แหล่งที่มา" (ซึ่งเป็นส่วนหนึ่งของคำว่า "ทรัพยากร") สิ่งนี้ทำงานได้ไม่ดีนักเนื่องจากมีผลบวกปลอมมากเกินไป แต่น่าจะใช้ได้กับตัวอย่างอื่น ๆ ของคุณ (bash, lynx และ whatis) บน Debian Linux: " whatis ." ให้ " .: nothing appropriate." บน OpenBSD จะให้ผลลัพธ์ 47 บรรทัด สำหรับตัวอย่างเฉพาะนี้ (การใช้ " whatis ." ใน Gentoo) ผลลัพธ์อาจเกิดขึ้นได้ไม่ดีนัก (หมายความว่าโดยทั่วไปเทคนิคนี้จะไม่เป็นประโยชน์สำหรับสถานการณ์ตัวอย่างอื่น ๆ )
TOOGAM

4

man source จะแสดงคำอธิบายที่คุณต้องการ

จุดเหมือนกันกับคำสั่งต้นทาง

source รันสคริปต์ในเชลล์ปัจจุบันแทนที่จะเป็นเชลล์ย่อย (เป็นวิธีปกติ)

การใช้sourceตัวแปรที่ตั้งไว้ภายในสคริปต์จะถูกเก็บรักษาไว้หลังจากสคริปต์เสร็จสิ้น


2
Distro man sourceทำงานอย่างไร? ไม่ได้อยู่ใน Debian ของฉันดังนั้นคำถาม
Kamil Maciorowski

1
มันทำงานได้ใน CentOS 6.5 ฉันเดาว่าเกี่ยวข้องกับเวอร์ชันของ bash มากขึ้น ในกรณีของฉันคือ 4.1.2 (1)
jcbermu

@ jcbermu ไม่มีรุ่นทุบตีส่งหน้าคนที่แยกต่างหากสำหรับsourceต้นน้ำ - ที่มีแนวโน้มมากกว่าสิ่งที่ CentOS ทำ
Charles Duffy

ในระบบของฉันman sourceให้คุณman bash_builtinsซึ่งไม่ได้อธิบายอะไรเลย แต่แนะนำให้คุณbash(1)
Scott

1
ในระบบของฉัน (Ubuntu LTS) man sourceให้ฉันsource(3tcl)... type commandและจากนั้นถ้าคำสั่งเป็น builtin help commandน่าจะเป็นวิธีที่เหมาะสม ...
Hastur

0

.เป็นคำพ้องสำหรับเปลือกsourceคำสั่งและอื่น ๆ ในทุบตีไวยากรณ์ของมันคือการแสดงโดย ...

help source

มันทำหน้าที่เหมือนกับincludeและimportคำสั่งในภาษาอื่น ๆ ที่มันอ่านไฟล์เป้าหมายและตีความมันราวกับว่ามันเป็นส่วนหนึ่งของสคริปต์ปัจจุบัน ดังนั้นไฟล์นั้นจะดำเนินการอย่างครบถ้วนก่อนคำสั่งในส่วนที่เหลือของสคริปต์ปัจจุบัน

โดยปกติควรเป็นจุดเริ่มต้นของสคริปต์ปัจจุบันและมักใช้เพื่อโหลดตัวแปรและ / หรือคำจำกัดความของฟังก์ชัน

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