คือ `ทดสอบ 'builtin หรือโปรแกรม


2

ทดสอบ shell builtin หรือโปรแกรมจริงหรือไม่?

bruce@Bruce:~$ type -a test
test is a shell builtin
test is /usr/bin/test
bruce@Bruce:~$

bruce@Bruce:~$ file /usr/bin/test
/usr/bin/test: ELF 64-bit LSB executable
bruce@Bruce:~$ 

ระบบของฉันใช้ Ubuntu 13.04 และ BASH 4.2.45 (1) - ปล่อย

bash 

ความคิดเห็นของฉันช่วยคุณได้: stackoverflow.com/questions/17487514/…
fedorqui

คำตอบ:


7

ดูเหมือนว่าฉันไม่ได้รับคำถามของคุณในแนวทางแรกของฉัน จะพยายามอธิบายเพิ่มเติม ...

ถึงแม้ว่าโปรแกรมtestนี้เป็นส่วนหนึ่งของแพ็คเกจ GNU coreutils และจะถูกส่งไปพร้อมกับระบบ GNU / Linux ใด ๆ แต่ก็มีการรวบรวมเป็นbashบิวด์อินในตัวกระจายส่วนใหญ่ ฉันเดาว่านี่คือการปรับปรุงประสิทธิภาพเนื่องจากไม่จำเป็นต้องเริ่มกระบวนการลูกสำหรับทุกคำสั่งแบบมีเงื่อนไข ไม่จำเป็นต้องพูดว่าเชลล์จะใช้บิวอินในตัวของไบนารีถ้าทั้งคู่อยู่ในระบบ แต่คุณสามารถโทร:

/usr/bin/test ...

... หากคุณต้องการเรียกเลขฐานสองอย่างชัดเจน

หมายเหตุเพิ่มเติมที่bashไม่ได้เป็นเพียงเปลือกหอยในระบบส่วนใหญ่และหอยอื่น ๆ อาจไม่ได้มีคุณสมบัติในตัวนี้ (เช่นdashตัวอย่าง) นอกจากนี้ยังมีระบบที่อาจไม่ได้bashติดตั้ง สำหรับสถานการณ์ดังกล่าวมีไบนารีจาก coreutils


มีโอกาสที่มันจะเป็นตัวในระบบของคุณ วิธีตรวจสอบประเภทนี้:

help test

หากคุณเห็นหน้าช่วยเหลือมันเป็น builtin

นอกจากนี้คุณสามารถพิมพ์:

type -t test

การแสดงนี้:

builtin 

ในระบบของฉัน


ทำไมจึงมีไฟล์ชื่อ test ในระบบไฟล์?

นี่เป็นเพราะแพ็คเกจ coreutils มีหนึ่ง
hek2mgl

ตัวไหนถูกเรียกใช้แล้ว

1
builtin .. หมายเหตุ: คุณจะหาได้ไบนารีที่เรียกว่า/bin/[.. แต่ยังมีในตัวที่เรียกว่า[
hek2mgl

1

testbuiltinเป็นคำสั่งเสมือนภายในทุบตีหรือสิ่งที่คุณสามารถเรียก มีอยู่เช่นเดียวกับภายนอก/usr/bin/test commandนอกจากบิวด์อินและคำสั่งแล้วfunctionsคุณยังสามารถนึกถึงบิวด์อินแบบกำหนดเองได้อีกด้วย ลำดับความสำคัญของวิธีการเรียกใช้คือ: ฟังก์ชั่นก่อนบิวด์อินตัวที่สองไบนารีหรือคำสั่งภายนอกล่าสุด แต่คุณสามารถปรับแต่งที่

ถ้าคุณได้ทำอย่างใดฟังก์ชั่นที่มีชื่อเดียวกับเช่น builtin cdเพื่อข้ามเรียกฟังก์ชั่นและเรียก builtin cdแทนคุณสามารถใช้คำสั่งในตัวเช่นbuiltinbuiltin cd args

ในทำนองเดียวกันถ้าคุณมีในตัวที่มีชื่อเดียวกับคำสั่งที่เก็บไว้ในระบบแฟ้มเช่นtestจะเรียกคำสั่งtestแทนทั้งคุณให้เช่นเส้นทางอย่างชัดเจน/usr/bin/testหรือใช้คำสั่งในตัวเช่นcommandcommand test -n xyz

หากต้องการทราบแนวคิดเพิ่มเติมลองใช้คำสั่งเหล่านี้:

help
help builtin
help command

1

ในอดีตtest(และคำพ้องความหมาย[) เป็นโปรแกรมภายนอก (และยังคงอยู่) แต่เชลล์ส่วนใหญ่ให้คำสั่งในตัวเพื่อประสิทธิภาพ เดียวกันเป็นจริงสำหรับคำสั่งที่เหมือนกันเช่นtrue, false, printf, echoฯลฯ


0

ในฐานะที่เป็นส่วนเติมเต็มให้คำตอบก่อนหนึ่งสามารถใช้คำสั่งในตัวenableเพื่อเปิดใช้งาน [หรือปิด] รุ่น builtin ของคำสั่งที่กำหนดcmd(เช่นtest) enable [-n] cmdโดย เอกสารของenableใช้อย่างแม่นยำtestเป็นตัวอย่างในระบบของฉัน

enable -a แสดงรายการของคำสั่ง builtin และสถานะการเปิดใช้งาน

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