คำถามติดแท็ก shell-builtin

shell builtin เป็นคำสั่งที่เรียกใช้จากเชลล์ซึ่งดำเนินการโดยตรงในเชลล์เอง

5
วิธีรันคำสั่ง 1 จาก N ครั้งใน Bash
ฉันต้องการวิธีเรียกใช้คำสั่งแบบสุ่มพูด 1 จาก 10 ครั้ง มี builtin หรือ GNU coreutil ทำสิ่งนี้นึกคิด: chance 10 && do_stuff ที่do_stuffจะดำเนินการเพียง 1 ใน 10 ครั้ง? ฉันรู้ว่าฉันสามารถเขียนสคริปต์ได้ แต่ดูเหมือนว่าค่อนข้างง่ายและฉันสงสัยว่ามีวิธีที่กำหนดไว้หรือไม่

4
จะเรียกใช้เชลล์ในตัวได้อย่างไร
ฉันต้องการปรับแต่งการทำงานของcdคำสั่งตามความต้องการของฉัน ฉันกำหนดหน้าที่ดังต่อไปนี้ - function cd () { cd "$@" && pushd "$@"; } ความตั้งใจของฟังก์ชั่นนี้คือการผลักดันไดเรกทอรีไปยังสแต็กโดยอัตโนมัติเพื่อให้ฉันไม่ต้องพยายามพิมพ์ด้วยตนเองpushd .ทุกครั้ง แต่ฟังก์ชั่นดังกล่าวข้างต้นเป็นฟังก์ชันเวียนเพียบเช่นการเรียกร้องให้cdมีการตีความว่าจะเป็นฟังก์ชั่นของตัวเองและไม่ได้cdในตัว ฉันจะอ้างอิงในcdตัวในฟังก์ชั่นนี้ได้อย่างไร \ฉันรู้ว่านามแฝงสามารถหนีออกมาใช้ เป็นวิธีการหลบหนีฟังก์ชั่นหรือการอ้างอิงในตัวในทางที่ชัดเจนมากขึ้นคืออะไร? หมายเหตุ: ฉันไม่ต้องการเปลี่ยนชื่อฟังก์ชั่นของฉันเป็นอย่างอื่น

2
คำสั่งของ executables เริ่มต้นด้วยการทุบตี
ถ้าฉันรันtestคำสั่งใน bash testยูทิลิตี้ในตัว (ประเมินนิพจน์แบบมีเงื่อนไข) จะเริ่มขึ้น: $ type test test is a shell builtin $ type -a test test is a shell builtin test is /usr/local/bin/test test is /usr/bin/test $ อย่างไรก็ตามดังที่เห็นในผลลัพธ์ของtype -a testข้างต้นมีอีกหนึ่งtestในไดเรกทอรี / usr / local / bin และอีกหนึ่งในไดเรกทอรี / usr / bin สั่งซื้อไฟล์เอ็กซีคิ้วท์ได้อย่างไรคือคำสั่งในตัวที่ต้องการเสมอแล้วคำสั่งที่เหลือจะขึ้นอยู่กับลำดับของไดเรกทอรีในตัวแปร $ PATH นอกจากนี้เป็นไปได้หรือไม่ที่จะเปลี่ยนลำดับของโปรแกรมเริ่มทำงานเช่นถ้าฉันพิมพ์ระบบtestจะเริ่ม / usr / …

1
ฉันจะรับข้อความช่วยเหลือสำหรับ zsh builtin ได้อย่างไร
หากฉันต้องการรับข้อความการใช้งานสั้น ๆ สำหรับ bash builtin ฉันสามารถใช้help <builtin>ที่พร้อมท์คำสั่งเช่น $ help export export: export [-fn] [name[=value] ...] or export -p Set export attribute for shell variables. Marks each NAME for automatic export to the environment of subsequently executed commands. If VALUE is supplied, assign VALUE before exporting. Options: -f refer to shell …

4
ใช้เคส / ตัวอย่างการปฏิบัติสำหรับ Bash 'builtin exec
พิจารณาจากเอกสารของ Bash 'builtin exec: exec แทนที่เชลล์โดยไม่ต้องสร้างกระบวนการใหม่ โปรดระบุกรณีการใช้งาน / ตัวอย่างการปฏิบัติ ฉันไม่เข้าใจว่าสิ่งนี้สมเหตุสมผลหรือไม่ ฉัน googled และพบเกี่ยวกับI / O เปลี่ยนเส้นทาง คุณช่วยอธิบายให้ดีขึ้นได้ไหม?

1
การใช้คำสั่ง“ time” ในตัวในทุบตีมากกว่าคำสั่งภายนอก
การทำงานกับtimeคำสั่งผมมาในสถานการณ์ที่ฉันควรใช้ในตัวมากกว่าคำสั่งเวลาtime GNU ภายนอก /usr/bin/timeดังนั้นฉันจะทำสิ่งนี้ได้อย่างไร ฉันเห็นบางที่ใช้enableและ / หรือcommandจะช่วย แต่พวกเขาไม่ได้ นี่เป็นกรณีการใช้งาน: watch "time ls" ซึ่งใช้/usr/bin/timeคำสั่งภายนอกซึ่งฉันไม่ต้องการ! สิ่งนี้เกิดขึ้นเมื่อtimeเรียกใช้ฟังก์ชันทุบตีภายในเมื่อฉันรันtime lsบนเทอร์มินัลเช่นนี้ $ time ls โปรดทราบว่าได้รับคำตอบตรงข้ามแน่นอน: ทำให้ทุบตีใช้คำสั่ง `time 'ภายนอกมากกว่าเชลล์ในตัว มีความแตกต่างมากมายกับสองคำสั่ง ภายในtimeมีความแม่นยำมากขึ้น (ซึ่งฉันต้องการ) แต่คำสั่งภายนอกมีตัวเลือกเพิ่มเติม (ซึ่งฉันไม่ต้องการ)

1
“ wait &” (“ wait ampersand”) เป็นประโยชน์ (bash) shell / shell script สำนวนหรือเทคนิค?
ฉัน "ได้รับมรดก" เชลล์สคริปต์บางตัวสำหรับเครื่อง Linux ที่ใช้เชลล์ "bash" ของ GNU ในกรณีเฉพาะกรณีหนึ่งเครื่องจะรัน GNU bash รุ่น 2.0.5b หนึ่งในสคริปต์เหล่านั้นมีคำสั่งwait &("wait ampersand") ซึ่งเป็นส่วนหนึ่งของ "for line" ของforลูป ตั้งแต่แรกพบดูเหมือนว่าจะเป็นสำนวนที่น่าสนใจ / น่าสนใจ แต่เว็บของฉันค้นหาไม่ได้ส่งคืนสิ่งใดที่เกี่ยวข้อง man waitแสดง manpage "BASH_BUILTINS" ("BASH BUILTINS COMMAND") ซึ่งมีคำอธิบายดังต่อไปนี้: wait [n] Wait for the specified process and return its termination status. n may be a process ID …

3
เป็นไปได้ที่จะใช้วงเล็บปีกกา (การเปลี่ยนรูป) และการขยายอาร์เรย์พร้อมกันไหม
{}ไวยากรณ์ส่วนขยายของ Bash อนุญาตให้สร้างวิธีเรียงสับเปลี่ยนได้ง่าย # echo {b,c,d}{a,e,i,o,u} ba be bi bo bu ca ce ci co cu da de di do du อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันถ้า / เป็นไปได้ที่จะใช้สิ่งนี้พร้อมกับอาร์เรย์ยกเว้นในการใช้งานที่น่าอึดอัดใจมาก$() echoและeval มีวิธีง่ายๆในการใช้อาร์เรย์ที่มีการขยายหยิก (เปลี่ยนรูป)? เพื่อประโยชน์เช่นลองจินตนาการถึงสิ่งที่ชอบ (ซึ่งไม่ได้ผลแน่นอน): CONS=( b c d ) VOWEL=( a e i o u ) echo {${CONS[@]}}{${VOWEL[@]}}

2
ทำความเข้าใจกับคำสั่ง shell builtin
ในคู่มือทุบตีมันเขียนไว้ว่า Builtin commands are contained >>> within <<< the shell itself นอกจากนี้คำตอบนี้ระบุว่า A built-in command is simply a command that the shell carries out itself, instead of interpreting it as a request to load and run some >>> other program <<< เมื่อผมทำงานcompgen -bเกี่ยวกับbash 4.4ผมได้รับรายชื่อของเปลือกทั้งหมดในตัวคำสั่ง ฉันเห็นตัวอย่างนั้น[และkillถูกระบุว่าเป็นเชลล์บิวด์อิน แต่สถานที่จริงของพวกเขาคือ: /usr/bin/[ /bin/kill ฉันคิดว่าเป็นbuiltinวิธีที่คำสั่งจะถูกรวบรวมเป็น/bin/bashปฏิบัติการ ดังนั้นสิ่งที่ทำให้ฉันสับสนจริงๆ: …

4
เมื่อใดที่คำสั่งในตัวถูกโหลดเข้าสู่หน่วยความจำ
สมมติว่าฉันพิมพ์ในcdเปลือกของฉัน ถูกcdโหลดจากหน่วยความจำในขณะนั้นหรือไม่ สัญชาตญาณของฉันคือคำสั่งในตัวเหล่านี้ถูกโหลดล่วงหน้าไปยังหน่วยความจำระบบหลังจากที่เคอร์เนลถูกโหลด แต่มีคนยืนยันว่าพวกเขาจะถูกโหลดเฉพาะเมื่อฉันเรียกใช้คำสั่งจริง (กด enter บนเชลล์) คุณช่วยกรุณาบอกฉันว่ามีการอ้างอิงที่อธิบายเรื่องนี้?

2
นับจำนวนองค์ประกอบในอาร์เรย์ทุบตีที่ชื่อของอาร์เรย์เป็นแบบไดนามิก (เช่นเก็บไว้ในตัวแปร)
คำชี้แจงสั้น ๆ ของคำถาม: มีวิธีการทุบตีในตัวเพื่อนับจำนวนขององค์ประกอบในอาร์เรย์ทุบตีที่ชื่อของอาร์เรย์เป็นแบบไดนามิก (เช่นเก็บไว้ในตัวแปร) โดยไม่ต้องหันไปทำสำเนาอย่างเต็มที่ของอาร์เรย์หรือใช้eval? ข้อมูลมากกว่านี้: การใช้การแทนที่พารามิเตอร์ bash สามารถทำได้ดังนี้: myArr=(A B C); echo ${#myArr[@]}กำหนดความยาวของอาร์เรย์: การอ้างอิงตัวแปรทางอ้อมโดยใช้ชื่อ: NAME=myVar; echo ${!NAME}(สิ่งนี้ยังใช้กับองค์ประกอบอาร์เรย์): NAME=myArr[1]; echo ${!NAME} แต่ถ้าชื่อของอาเรย์ถูกเก็บไว้ในตัวแปรอีกตัวหนึ่งจะกำหนดจำนวนขององค์ประกอบในอาเรย์ได้อย่างไร? (หนึ่งอาจพิจารณาว่าเป็นการรวมกันของการแทนที่พารามิเตอร์สองตัวด้านบน) ตัวอย่างเช่น: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What …

1
“ s” ใน“ $ -” คืออะไร?
$-ปกติฉันตระหนักดีถึงเนื้อหาของ CentOS ล่าสุดที่ฉันได้รับ: [grochmal@orion ~]$ echo $- himBH hmBHเป็นตัวเลือกทั้งหมดจากsetและiหมายความว่าเปลือกของฉันเป็นแบบโต้ตอบ กระนั้นบน Arch Linux ของฉันฉันได้รับ: [grochmal@haps ~]$ echo $- himBHs ฉันไม่พบสิ่งที่มีประโยชน์man bashและset -sทำให้ฉันมีข้อผิดพลาด สิ่งนั้นหมายsถึงอะไร

4
ทำไมโปรแกรมของฉันถูกเรียกว่า "set" ไม่ถูกเรียกใช้งาน?
ฉันได้สร้างโปรแกรม C อย่างง่ายเช่นนั้น: int main(int argc, char *argv[]) { if (argc != 5) { fputs("Not enough arguments!\n", stderr); exit(EXIT_FAILURE); } และฉันมีเส้นทางของฉันแก้ไขในetc / bash.bashrcเช่นนั้น PATH=.:$PATH ฉันได้บันทึกโปรแกรมนี้เป็น set.c และกำลังรวบรวมด้วย gcc -o set set.c ในโฟลเดอร์ ~/Programming/so อย่างไรก็ตามเมื่อฉันโทร set 2 3 ไม่มีอะไรเกิดขึ้น. ไม่มีข้อความที่ปรากฏ การเรียกร้อง ./set 2 3 ให้ผลลัพธ์ที่คาดหวัง ฉันไม่เคยมีปัญหากับ PATH มาก่อนและ which set ./setผลตอบแทน …

2
เชลล์ไม่เฉพาะเจาะจงอะไร
ภายใต้คำตอบบางอย่างฉันเห็นความคิดเห็นที่แนะนำให้หลีกเลี่ยงคำสั่งเฉพาะของเชลล์ในคำตอบ ฉันจะรู้ได้อย่างไรว่าคำสั่งโอเปอเรเตอร์และอื่น ๆ มีอยู่ในทุกเชลล์? มีรายการมาตรฐานหรือไม่? man builtinsให้รายการคำสั่ง คำสั่งเหล่านั้นเป็นคำสั่งเดียวที่ฉันสามารถใช้ในเชลล์สคริปต์แบบพกพาที่ใช้ได้กับเชลล์ทั้งหมดหรือไม่? ในตัวสามารถเป็นเปลือกเฉพาะ? มาตรฐานสำหรับ Linux แตกต่างจาก Unixes อื่น ๆ หรือไม่? แล้วไวยากรณ์ล่ะ เครื่องหมายวรรคตอนโอเปอเรเตอร์และอื่น ๆ อาจแตกต่างกันในหอยบางตัวหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.