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

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


5
อะไรคือความแตกต่างระหว่าง eval และ exec?
evalและexecทั้งสองอยู่ในคำสั่งของ bash (1) ที่รันคำสั่ง ฉันเห็นด้วยexecมีตัวเลือกน้อย แต่นั่นคือความแตกต่างเท่านั้น? เกิดอะไรขึ้นกับบริบทของพวกเขา

4
อะไรคือความแตกต่างระหว่างคำสั่ง builtin และคำสั่งที่ไม่ได้ใช้?
มีความแตกต่างที่แท้จริงระหว่างคำสั่ง builtin และคำสั่งอื่นซึ่งในนามสามารถทำสิ่งเดียวกันในนาม? เช่น. builtins ได้รับการบำบัดแบบพิเศษหรือไม่ ... มีค่าใช้จ่ายน้อยลงหรือไม่ .. หรือว่าพวกเขาเพียงแค่ 'สร้างขึ้นใน'; ชอบแดชบอร์ดของรถของคุณ? ... และมีรายการ (ปัจจุบัน) ที่ชัดเจนของ builtins เหล่านี้หรือไม่

4
ทำไม `['เชลล์สร้างขึ้นในตัวและ` [[' คำสำคัญของเชลล์]
เท่าที่ฉันรู้[[เป็นรุ่นปรับปรุง[แต่ฉันสับสนเมื่อฉันเห็น[[ว่าเป็นคำหลักและ[ถูกแสดงเป็น builtin [root@server ~]# type [ [ is a shell builtin [root@server ~]# type [[ [[ is a shell keyword TLDPพูดว่า builtin อาจเป็นคำพ้องความหมายของคำสั่งระบบที่มีชื่อเดียวกัน แต่ Bash นำมาใช้ใหม่ภายใน ตัวอย่างเช่นคำสั่ง Bash echo ไม่เหมือนกับ / bin / echo แม้ว่าพฤติกรรมของพวกเขาจะเกือบเหมือนกัน และ คำหลักคือคำโทเค็นหรือตัวดำเนินการที่สงวนไว้ คำหลักมีความหมายพิเศษกับเชลล์และแน่นอนว่าเป็นหน่วยการสร้างของไวยากรณ์ของเชลล์ เป็นตัวอย่างสำหรับในขณะที่ทำและ! เป็นคำหลัก เช่นเดียวกับ builtin คีย์เวิร์ดนั้นยากที่จะเขียนลงใน Bash แต่ต่างจาก builtin คำสำคัญนั้นไม่ได้อยู่ในคำสั่ง แต่เป็นหน่วยย่อยของคำสั่งสร้าง [2] ไม่ควรที่จะทำให้ทั้งสอง[และ[[คำหลัก? …

8
เหตุใดยูทิลิตี้บังคับ POSIX จึงไม่ได้สร้างไว้ในเชลล์?
จุดประสงค์ของคำถามนี้คือเพื่อตอบสนองความอยากรู้อยากเห็นไม่ใช่เพื่อแก้ปัญหาการคำนวณโดยเฉพาะ คำถามคือ: เหตุใดยูทิลิตี้บังคับ POSIX จึงไม่ได้สร้างอยู่ในการใช้งานเชลล์? ตัวอย่างเช่นฉันมีสคริปต์ที่อ่านไฟล์ข้อความเล็ก ๆ น้อย ๆ และตรวจสอบว่ามีการฟอร์แมตอย่างถูกต้อง แต่ใช้เวลา 27 วินาทีในการเรียกใช้บนเครื่องของฉันเนื่องจากมีการจัดการสตริงจำนวนมาก การจัดการสตริงนี้สร้างกระบวนการใหม่นับพันโดยเรียกโปรแกรมอรรถประโยชน์ต่าง ๆ ดังนั้นความเชื่องช้า ผมค่อนข้างมั่นใจว่าถ้าบางส่วนของสาธารณูปโภคที่ถูกสร้างขึ้นในคือgrep, sed, cut, trและexprแล้วสคริปต์ที่จะวิ่งในครั้งที่สองหรือน้อยกว่า (ขึ้นอยู่กับประสบการณ์ของผมใน C) ดูเหมือนว่าจะมีหลายสถานการณ์ที่การสร้างโปรแกรมอรรถประโยชน์เหล่านี้จะสร้างความแตกต่างระหว่างว่าโซลูชันในเชลล์สคริปต์มีประสิทธิภาพที่ยอมรับได้หรือไม่ เห็นได้ชัดว่ามีเหตุผลที่เลือกที่จะไม่สร้างยูทิลิตี้เหล่านี้ในตัวอาจมียูทิลิตี้หนึ่งเวอร์ชันในระดับระบบเพื่อหลีกเลี่ยงการมียูทิลิตี้รุ่นนั้นไม่เท่ากันหลายรุ่น ฉันไม่สามารถคิดด้วยเหตุผลอื่น ๆ อีกมากมายที่จะรักษาค่าใช้จ่ายในการสร้างกระบวนการใหม่จำนวนมากและ POSIX กำหนดเพียงพอเกี่ยวกับยูทิลิตี้ที่ดูเหมือนว่าปัญหาจะมีการใช้งานที่แตกต่างกันไม่มาก ไม่ขัดขืน อย่างน้อยก็ไม่เป็นปัญหาใหญ่เท่าความไร้ประสิทธิภาพของการมีกระบวนการมากมาย

7
ลำไส้ใหญ่ภายในมีจุดประสงค์อะไร
ฉันแฮ็คสคริปต์เชลล์จำนวนมากและบางครั้งสิ่งที่ง่ายที่สุดก็ทำให้ฉันยุ่งเหยิง วันนี้ฉันพบสคริปต์ที่ใช้:ทุบตี (โคลอน) builtin อย่างกว้างขวาง Documenationดูเหมือนว่าพอง่าย: : (a colon) : [arguments] อย่าทำอะไรเลยนอกเหนือจากการขยายข้อโต้แย้งและทำการเปลี่ยนเส้นทาง สถานะการส่งคืนเป็นศูนย์ อย่างไรก็ตามก่อนหน้านี้ฉันเคยเห็นสิ่งนี้ใช้ในการสาธิตการขยายตัวของเชลล์ กรณีการใช้งานในสคริปต์ที่ฉันวิ่งข้ามได้ใช้โครงสร้างนี้อย่างกว้างขวาง: if [ -f ${file} ]; then grep some_string ${file} >> otherfile || : grep other_string ${file} >> otherfile || : fi จริง ๆ แล้วมีหลายร้อย greps แต่พวกเขาก็เหมือนกัน ไม่มีการเปลี่ยนทิศทางอินพุต / เอาต์พุตนอกเหนือจากโครงสร้างอย่างง่ายด้านบน ไม่มีการตรวจสอบค่าส่งคืนในสคริปต์ ฉันกำลังอ่านสิ่งนี้เป็นสิ่งก่อสร้างที่ไร้ประโยชน์ที่ระบุว่า "หรือไม่ทำอะไรเลย" มีจุดประสงค์อะไรที่จะจบ greps เหล่านี้ด้วย …


6
ทำไมเสียงก้องเชลล์ในตัวจึงเป็นคำสั่ง?
$ which echo echo: shell built-in command. $ which ls /bin/ls $ which cat /bin/cat เพราะเหตุใดจึงไม่ได้สะท้อนยูทิลิตี้ที่เป็นอิสระเช่นls, ps, catetc? ทำไมมันถึงเป็นเปลือกเฉพาะ? มีเหตุผลที่ดีไหม?

6
'cat' เป็นเชลล์ในตัวหรือเป็นโปรแกรมภายนอกหรือไม่
เมื่อฉันใช้typeคำสั่งเพื่อตรวจสอบว่าcatเป็นเชลล์ในตัวหรือโปรแกรมภายนอกฉันได้รับผลลัพธ์ด้านล่าง: -$ type cat cat is hashed (/bin/cat) -$ นี่หมายความว่าcatเป็นโปรแกรมภายนอก/bin/catหรือไม่ ฉันสับสนเพราะเมื่อฉันตรวจสอบผลลัพธ์ด้านล่างechoเพื่อดูว่ามันเป็นbuilt-inโปรแกรม/bin/echo -$ type echo echo is a shell builtin -$ which echo /bin/echo -$ ดังนั้นฉันไม่สามารถใช้ตรรกะที่/bin/catจำเป็นต้องหมายถึงโปรแกรมภายนอกเพราะเสียงก้องเป็น/bin/echoแต่ยังคงเป็นในตัว แล้วฉันจะรู้ได้อย่างไรว่าcatมันคืออะไร? ในตัวหรือภายนอก?
33 bash  cat  echo  shell-builtin 

5
ทำให้ bash ใช้คำสั่ง `time 'จากภายนอกแทนที่จะใช้เชลล์ในตัว
ฉันจะทำให้ bash ใช้ time binary (/ usr / bin / time) เป็นค่าเริ่มต้นแทนที่จะเป็นคีย์เวิร์ดเชลล์ได้อย่างไร? which timeการส่ง/usr/bin/time type timeคืนการtime is a shell keyword รันtimeกำลังดำเนินการคำหลักเชลล์: $ time real 0m0.000s user 0m0.000s sys 0m0.000s $ /usr/bin/time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...] enable -n …

2
จุดประสงค์ของการสั่งทุบตี `` suspend 'builtin คืออะไร?
ฉันพิมพ์help suspendและได้รับคำอธิบายสั้น ๆ นี้: suspend: suspend [-f] Suspend shell execution. Suspend the execution of this shell until it receives a SIGCONT signal. Unless forced, login shells cannot be suspended. Options: -f force the suspend, even if the shell is a login shell Exit Status: Returns success unless job control is …

2
เหตุใด POSIX จึงต้องมีเชลล์ในตัวเพื่อให้มีการใช้งานภายนอก
จากคำถามนี้เกี่ยวกับว่าเป็น printf ในตัวสำหรับ Yashมาคำตอบนี้ว่าคำพูดมาตรฐาน POSIX คำตอบนั้นชี้ให้เห็นว่าลำดับการค้นหา POSIX คือการค้นหาการนำไปใช้ภายนอกของคำสั่งที่ต้องการและจากนั้นหากเชลล์นำมาใช้เป็นแบบบิวด์อินให้รันบิวด์อิน (สำหรับบิวด์อินที่ไม่ใช่บิวด์อินพิเศษ) เหตุใด POSIX จึงมีข้อกำหนดนี้เพื่อให้มีการใช้งานภายนอกอยู่ก่อนที่จะอนุญาตให้มีการใช้งานภายในได้ ดูเหมือน ... โดยพลการดังนั้นฉันอยากรู้

5
เขียนเอาต์พุตของ "time" ในไฟล์ทำไมต้องใช้วงเล็บ?
timeเขียนไปstderrดังนั้นใครจะคิดว่าการเพิ่มบรรทัดคำสั่งควรเส้นทางการส่งออกไปยัง2>&1 stdoutแต่นี่ไม่ได้ผล: test@debian:~$ cat file one two three four test@debian:~$ time wc file > wc.out 2>&1 real 0m0.022s user 0m0.000s sys 0m0.000s test@debian:~$ cat wc.out 1 4 19 file ใช้งานได้กับวงเล็บเท่านั้น: test@debian:~$ (time wc file) > wc.out 2>&1 test@debian:~$ cat wc.out 1 4 19 file real 0m0.005s user 0m0.000s sys 0m0.000s …

6
ใช้คำสั่งระบบแทน Bash builtin โดยไม่ระบุพา ธ เต็ม
ฉันใช้ Bash เป็นเชลล์เชิงโต้ตอบของฉันและฉันสงสัยว่ามีวิธีง่ายๆในการทำให้ Bash เรียกใช้คำสั่งระบบแทนคำสั่ง shell builtin ในกรณีที่พวกเขาทั้งสองใช้ชื่อเดียวกันร่วมกัน ตัวอย่างเช่นใช้ระบบkill(จากutil-linux) เพื่อพิมพ์รหัสกระบวนการ (pid) ของกระบวนการที่ระบุชื่อ (es) แทนการส่งสัญญาณ: $ /bin/kill -p httpd 2617 ... โดยไม่ระบุพา ธ แบบเต็มของคำสั่งระบบ Bash builtin จะถูกใช้แทนคำสั่งระบบ killbuiltin ไม่ได้มี-pตัวเลือกเพื่อให้คำสั่งล้มเหลว: $ kill -p httpd bash: kill: p: invalid signal specification ฉันพยายามตอบที่ระบุไว้ในทำให้การใช้งานภายนอกทุบตี `คำสั่ง time` มากกว่าเปลือก builtinแต่ส่วนใหญ่ของพวกเขาทำงานเพียงเพราะtimeเป็นจริงเปลือกคำหลัก - ไม่เปลือกbuiltin นอกเหนือจากการปิดการใช้งาน Bash builtin ชั่วคราวenable -n …

1
ความแตกต่างระหว่างสิ่งที่และที่ไหน
ความแตกต่างระหว่างคำสั่งwhereและwhichคำสั่งเชลล์คืออะไร? นี่คือตัวอย่างบางส่วน ~ where cc /usr/bin/cc /usr/bin/cc ~ which cc /usr/bin/cc และ ~ which which which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/which ~ which where /usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin) ด้วย ~ where which which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde which: shell built-in command /usr/bin/which …

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