ตัวอย่างเช่นถ้าผ่านls
เป็นอินพุตก็ควรบอกฉันว่า/bin/ls
จะทำงานถ้ารันls
บนบรรทัดคำสั่ง
ตัวอย่างเช่นถ้าผ่านls
เป็นอินพุตก็ควรบอกฉันว่า/bin/ls
จะทำงานถ้ารันls
บนบรรทัดคำสั่ง
คำตอบ:
เฉพาะเชลล์ในตัวเท่านั้นที่จะบอกได้อย่างถูกต้องว่าเชลล์จะทำอะไรกับชื่อคำสั่งที่กำหนดเนื่องจากมีเพียงบิวด์อินเท่านั้นที่สามารถรู้เกี่ยวกับนามแฝงฟังก์ชันเชลล์บิวด์อินอื่น ๆ และอื่น ๆ ได้อย่างสมบูรณ์ เตือนความจำ: คำสั่งบางคำอาจไม่ตรงกับไฟล์เรียกทำงานในตอนแรก
สำหรับบอร์นอีกครั้งเปลือกbash
, built-in เป็นtype
คำสั่ง:
$ type '['
[ is a shell builtin
สำหรับเปลือกปลาfish
ที่type
builtin ทำงานคล้ายกับทุบตี ในการรับพา ธ ไปยังไฟล์สั่งการให้ใช้command -v
:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
สำหรับ Korn Shell, ksh
, built-in เป็นwhence
คำสั่ง - มีการtype
เริ่มตั้งขึ้นเป็นนามแฝงสามัญwhence -v
และcommand
ในตัวด้วย-v
เทียบเท่าตัวเลือกในการwhence
:
$ whence -v ls
ls is a tracked alias for /bin/ls
สำหรับ Z เชลล์zsh
, built-in เป็นwhence
คำสั่งที่มีcommand
ในตัวด้วย-v
เทียบเท่าตัวเลือกwhence
และสร้างอินtype
, which
และwhere
เทียบเท่าwhence
กับตัวเลือก-v
, -c
และ-ca
ตามลำดับ
$ whence ls
/bin/ls
สำหรับ TC เชลล์tcsh
, built-in เป็นwhich
คำสั่ง - ไม่ต้องสับสนกับคำสั่งภายนอกใด ๆ โดยใช้ชื่อว่า:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
type
นอกจากนี้ยังมี builtin เพื่อ zsh?
which-2.19-6.el6.x86_64
) /etc/profile.d/which2.sh
ทำให้แฟ้มเริ่มต้นใน สิ่งนี้ถูกอ่านโดยเชลล์ที่ไม่ใช่ csh รวมถึง zsh มันเป็นนามแฝงของwhich
ตัวเอง ดังนั้นสำหรับผู้ใช้ zsh โดยเฉพาะจะมีการแทนที่ตัวบิวด์which
อิน
คุณสามารถใช้which
สิ่งนี้:
aix@aix:~$ which ls
/bin/ls
มันทำงานได้โดยการค้นหาPATH
ไฟล์เรียกทำงานที่ตรงกับชื่อของอาร์กิวเมนต์ โปรดทราบว่าจะไม่ทำงานกับนามแฝงเปลือก:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
type
อย่างไรก็ตามทำงานได้:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
which
ไม่จำเป็นต้องมีเพียงพอในตัวเอง มันจะส่งคืนชื่อที่พบครั้งแรกใน $ PATH ... ชื่อนั้นอาจเป็นลิงก์สัญลักษณ์และไม่ใช่การปฏิบัติการแบบ end-of-chain ที่แท้จริง
which
ไม่ได้ (จำเป็น) คืนไฟล์ที่ปฏิบัติการได้ มันคืนชื่อไฟล์แรกที่พบใน $ PATH (หรือหลาย ๆ ไฟล์เหมือนชื่อเมื่อใช้which -a
) ... ปฏิบัติการจริงอาจจะมีลิงค์หลายลิงค์
which locate
/usr/bin/locate
file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
คำสั่งซึ่งพบว่าที่จริงปฏิบัติการreadlink -e
,
(ร่วมกับwhich
)
readlink -e $(which locate)
/usr/bin/mlocate
หากต้องการดูลิงก์กลางทั้งหมด:
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate
คุณสามารถลอง:
whereis ls
มันทำให้ฉัน:
ls: /bin/ls /usr/share/man/man1/ls.1.gz