type commandname
ใช้ สิ่งนี้จะคืนค่าเป็นจริงหากcommandname
มีสิ่งใดที่สามารถดำเนินการได้: นามแฝง, ฟังก์ชัน, คำสั่งในตัวหรือภายนอก (ค้นหาใน$PATH
) อีกทางเลือกหนึ่งคือใช้คำสั่งcommand commandname
ส่งคืนค่าจริงถ้าcommandname
เป็นคำสั่งในตัวหรือภายนอก (ค้นหาใน$PATH
)
exists () {
type "$1" >/dev/null 2>/dev/null
}
มีตัวแปร SH หลายตัว (แน่นอนก่อน POSIX; ฉันรู้/bin/sh
ภายใต้ OSF1 ≤3.xและเชลล์ Almquist บางรุ่นที่พบใน NetBSD รุ่นแรกและการกระจาย Linux ในศตวรรษที่ 20) ซึ่งtype
ส่งคืน 0 เสมอหรือไม่ ที่มีอยู่ ฉันไม่คิดว่าระบบใด ๆ ที่ส่งมาพร้อมกับสหัสวรรษนี้ หากคุณเคยพบพวกเขานี่เป็นฟังก์ชั่นที่คุณสามารถใช้ค้นหา$PATH
ด้วยตนเอง:
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
ฟังก์ชั่นนี้จะเป็นประโยชน์โดยทั่วไปถ้าคุณต้องการที่จะไม่รวมตัว -ins $PATH
และฟังก์ชั่นและมองขึ้นชื่อใน เชลล์ส่วนใหญ่มี built-in สำหรับสิ่งนี้command -v
ถึงแม้ว่ามันจะเป็นส่วนเสริมล่าสุดของ POSIX (ยังเป็นตัวเลือก ณ วันที่ POSIX: 2004) โดยพื้นฐานแล้วมันเป็นเวอร์ชันที่เหมาะสำหรับโปรแกรมเมอร์ซึ่งtype
จะพิมพ์เส้นทางแบบเต็มสำหรับการเรียก$PATH
ใช้งานได้ชื่อเปล่าสำหรับบิวด์อินหรือฟังก์ชันและคำจำกัดความของนามแฝงสำหรับนามแฝง
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
ksh, ทุบตีและ zsh ยังมีtype -p
ที่จะมองขึ้นเพียง executables $PATH
ใน โปรดทราบว่าในทุบตีสถานะการส่งคืนtype -p foo
เป็น 0 ถ้าfoo
เป็นในตัวหรือฟังก์ชั่น; ถ้าคุณต้องการทดสอบการปฏิบัติการ$PATH
คุณต้องตรวจสอบว่าเอาต์พุตไม่ว่างเปล่า type -p
ไม่ได้อยู่ใน POSIX; เช่น Debian's ash (ซึ่งอยู่/bin/sh
ใน Ubuntu) ไม่มีอยู่