ฉันต้องการค้นหาเส้นทางของโปรแกรมที่กำหนดในการPATH
ใช้เชลล์สคริปต์ เส้นทางที่จะต้องเป็นเส้นทางจริงเต็มรูปแบบของโปรแกรมซึ่งสามารถส่งผ่านต่อมาหนึ่งในexec*
ฟังก์ชั่นที่ไม่ได้ค้นหาตัวเองเช่นPATH
execv
มีโปรแกรมเช่นkill
ซึ่งมีให้เป็นโปรแกรมจริงและเชลล์ในตัวในเวลาเดียวกัน หากเป็นกรณีนี้ฉันต้องการเส้นทางแบบเต็มไปยังโปรแกรมจริง
มีสาธารณูปโภคหลายอย่างที่สามารถหาโปรแกรมบนเป็นPATH
ตามที่ระบุไว้ในมาตรา 2.9.1.1 คำสั่งค้นหาและการดำเนินการของมาตรฐาน
มีwhich
ซึ่งไม่ได้เป็นส่วนหนึ่งของมาตรฐานใด ๆ มันสามารถเป็นโปรแกรมปกติในบางระบบในขณะที่บางเชลล์ให้มันเป็น builtin ดูเหมือนว่าจะมีอยู่ในระบบและเชลล์ส่วนใหญ่ แต่เชลล์ที่มีเวอร์ชันในตัวก็แค่ส่งคืนชื่อของบิวด์อินแทนที่จะเป็นพา ธ ไปยังไฟล์ที่เรียกใช้งานได้ นอกจากนี้ยังไม่ได้มาตรฐานในทางใดทางหนึ่งและอาจส่งคืนผลลัพธ์ใด ๆ และใช้ตัวเลือกที่แตกต่างกัน
bash# which kill
/usr/bin/kill
dash# which kill
/usr/bin/kill
fish# which kill
/usr/bin/kill
mksh# which kill
/usr/bin/kill
tcsh# which kill
kill: shell built-in command.
zsh# which kill
kill: shell built-in command
มีwhence
ซึ่งเป็นในตัวของเปลือกหอยไม่กี่คน แต่ไม่สามารถใช้ได้กับกระสุนจำนวนมาก มันก็จะกลับชื่อของในตัวแทนเส้นทางไปยังโปรแกรม -p
อาจจะส่งผ่านไปยังมาจากไหนที่จะเปลี่ยนพฤติกรรมนี้
bash# whence kill
bash: whence: command not found
dash# whence kill
dash: 1: whence: not found
fish# whence kill
fish: Unknown command 'whence'
mksh# whence kill
kill
mksh# whence -p kill
/usr/bin/kill
tcsh# whence kill
whence: Command not found.
zsh# whence kill
kill
zsh# whence -p kill
/usr/bin/kill
มีเป็นcommand
builtin ระบุโดย POSIX: น่าเสียดายที่มันยังค้นหาคำสั่งปกติและบิวด์อินและจะส่งคืนชื่อของบิวด์อินแทนพา ธ ไปยังโปรแกรมที่แชโดว์โดยบิวด์อินที่มีชื่อเดียวกัน เชลล์เก่าบางตัวยังไม่ได้ใช้งาน
bash# command -v kill
kill
dash# command -v kill
kill
fish# command -v kill
/usr/bin/kill
mksh# command -v kill
kill
tcsh# command -v kill
command: Command not found.
zsh# command -v kill
kill
realpath
enable
มีให้โดยbash
และzsh
type -p
ที่ถูกกล่าวว่าในทุบตีที่จะเป็น ทั้ง bash และ dash ให้คุณบอกว่าcommand
command ให้เรียกใช้ปฏิบัติการจริงได้แม้ว่าจะมีฟังก์ชั่นหรือ builtin ที่มีชื่อเหมือนกันก็ตาม
command
ข้ามฟังก์ชั่น (และนามแฝง) แต่ไม่ใช่ builtins ตามที่ Q พูดอย่างถูกต้อง และคุณไม่สามารถใช้ shebang ได้ตลอดเวลาเพราะไม่มีเส้นทางที่ได้รับเชลล์ใด ๆ หรือแม้แต่ POSIX เชลล์บางตัวในทุกระบบ
enable
มีการระบุใน POSIX หรือไม่ แต่ถ้ามันเป็นคุณสามารถใช้เพื่อปิดการใช้เปลือกในตัวสำหรับenable -n which
which