เชลล์รู้คำสั่งสี่ชนิด
- นามแฝง: เหล่านี้เป็นชื่อเล่นสำหรับคำสั่งที่มีตัวเลือกบางอย่าง พวกเขาถูกกำหนดไว้ในไฟล์เริ่มต้นของเชลล์ (
~/.bashrc
สำหรับทุบตี)
- ฟังก์ชั่น: พวกเขาเป็นตัวอย่างของรหัสเปลือกให้ชื่อ เช่นเดียวกับนามแฝงพวกเขาจะถูกกำหนดในไฟล์เริ่มต้นของเชลล์
- Builtins: เชลล์มาพร้อมกับคำสั่งในตัวจำนวนเล็กน้อย บิวอินส่วนใหญ่จัดการสถานะเชลล์ (
cd
เปลี่ยนไดเรกทอรีปัจจุบันset
เปลี่ยนตัวเลือกและพารามิเตอร์ตำแหน่งexport
เปลี่ยนแปลงสภาพแวดล้อม ... ) เชลล์ส่วนใหญ่เสนอบิวด์อินเดียวกันส่วนใหญ่ แต่เชลล์แต่ละตัวมีส่วนขยายบางอย่างสำหรับชุดพื้นฐาน
- คำสั่งภายนอก: พวกเขาเป็นอิสระจากเปลือก เช่นเดียวกับโปรแกรมอื่น ๆ เชลล์เรียกใช้งานโปรแกรมภายนอกโดยค้นหาพวกมันในพา ธ การค้นหาที่เรียกใช้งานได้
PATH
ตัวแปรสภาพแวดล้อมประกอบด้วยรายการแยกลำไส้ใหญ่ของไดเรกทอรีที่จะค้นหาสำหรับโปรแกรม
ในกรณีที่มีคำสั่งหลายประเภทด้วยชื่อเดียวกันการจับคู่ครั้งแรกในลำดับข้างต้นจะถูกดำเนินการ¹
type some_name
คุณสามารถมองเห็นสิ่งที่ประเภทของคำสั่งชื่อสอดคล้องกับการทำงานโดย
คุณสามารถแสดงชื่อแทนโดยเรียกใช้alias
บิวด์อินโดยไม่มีอาร์กิวเมนต์ ไม่มีวิธีในการแสดงรายการฟังก์ชั่นหรือบิวด์อินที่ใช้งานได้ในทุกเชลล์ คุณสามารถค้นหารายการบิวอินในเอกสารของเชลล์
ในทุบตีset
builtin รายการฟังก์ชั่นที่มีคำจำกัดความของพวกเขาเช่นเดียวกับตัวแปร ใน bash, ksh หรือ zsh typeset -f
แสดงรายการฟังก์ชันพร้อมคำจำกัดความ ในทุบตีคุณสามารถแสดงรายการชื่อคำสั่งทั้งหมดของชนิดใด ๆ compgen -c
กับ คุณสามารถใช้compgen -A alias
, compgen -A builtin
compgen -A function
คำสั่งรายการประเภทที่เฉพาะเจาะจง คุณสามารถส่งสตริงเพิ่มเติมไปยังcompgen
เพื่อแสดงรายการคำสั่งที่ขึ้นต้นด้วยคำนำหน้านั้นเท่านั้น
ใน zsh คุณสามารถแสดงรายการคำสั่งที่มีอยู่ในปัจจุบันจากประเภทให้กับecho ${(k)aliases}
, echo ${(k)functions}
, echo ${(k)builtins}
และecho ${(k)commands}
(ว่าที่ผ่านมาหนึ่งรายการคำสั่งภายนอกเท่านั้น)
ตัวอย่างเชลล์แบบไม่เชื่อเรื่องพระเจ้าต่อไปนี้แสดงรายการโปรแกรมภายนอกทั้งหมดที่มี:
case "$PATH" in
(*[!:]:) PATH="$PATH:" ;;
esac
set -f; IFS=:
for dir in $PATH; do
set +f
[ -z "$dir" ] && dir="."
for file in "$dir"/*; do
if [ -x "$file" ] && ! [ -d "$file" ]; then
printf '%s = %s\n' "${file##*/}" "$file"
fi
done
done
มีตัวพิมพ์ขอบใน Bash: คำสั่งที่แฮช
คู่มืออ้างอิง Bashบอกว่า:
การค้นหาไดเร็กทอรีแบบเต็มใน $ PATH จะดำเนินการเฉพาะเมื่อไม่พบคำสั่งในตารางแฮช
ลอง:
set -h
mkdir ~/dir-for-wat-command
echo 'echo WAT!' >~/dir-for-wat-command/wat
chmod +x ~/dir-for-wat-command/wat
hash -p ~/dir-for-wat-command/wat wat
wat
PATH
ตัวแปรสภาพแวดล้อมไม่ได้มี~/dir-for-wat-command
, compgen -c
ไม่แสดงแต่คุณสามารถเรียกใช้wat
wat
หากคุณต้องการเงาคำสั่งที่มีอยู่กำหนดนามแฝงหรือฟังก์ชั่น
¹ ข้อยกเว้น: บิวอินบางตัว (เรียกว่าบิวด์อินพิเศษ ) ไม่สามารถเงาด้วยฟังก์ชันได้ - bash และ zsh ไม่สอดคล้องกับ POSIX ที่จุดนั้นในโหมดเริ่มต้น