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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

10
ความแตกต่างที่แน่นอนระหว่าง 'terminal', 'shell', 'tty' และ 'console' คืออะไร?
ฉันคิดว่าคำเหล่านี้เกือบจะอ้างถึงสิ่งเดียวกันเมื่อใช้อย่างหลวม ๆ : สถานีปลายทาง เปลือก TTY ปลอบใจ แต่ละคำเหล่านี้อ้างถึงอะไรอย่างแน่ชัด?

13
ฉันจะ grep สำหรับรูปแบบหลายรูปแบบโดยมีรูปแบบที่มีอักขระไพพ์ได้อย่างไร
ฉันต้องการค้นหาทุกบรรทัดในไฟล์หลายไฟล์ที่ตรงกับหนึ่งในสองรูปแบบ ฉันพยายามค้นหารูปแบบที่ฉันต้องการโดยพิมพ์ grep (foo|bar) *.txt แต่เชลล์ตีความ|ว่าbarเป็นไพพ์และบ่นเมื่อไม่มีการปฏิบัติการ ฉันจะ grep สำหรับหลายรูปแบบในไฟล์ชุดเดียวกันได้อย่างไร?



13
ปิดการบัฟเฟอร์ในท่อ
ฉันมีสคริปต์ที่เรียกสองคำสั่ง: long_running_command | print_progress long_running_commandพิมพ์ความคืบหน้า แต่ฉันไม่มีความสุขกับมัน ฉันใช้print_progressเพื่อทำให้ดีขึ้น (กล่าวคือฉันพิมพ์ความคืบหน้าในบรรทัดเดียว) ปัญหา: การเชื่อมต่อไปยัง stdout ยังเปิดใช้งานบัฟเฟอร์ 4K เพื่อโปรแกรมการพิมพ์ที่ดีไม่ได้รับอะไรเลย ... ไม่มีอะไร ... ไม่มีอะไร ... ทั้งนั้น ... :) ฉันจะปิดการใช้งานบัฟเฟอร์ 4K สำหรับlong_running_command(ไม่ฉันไม่มีแหล่งที่มา)
395 shell  pipe  buffer 

10
ฉันจะลบไฟล์ที่ชื่อขึ้นต้นด้วย“ -” (เครื่องหมายขีดกลางหรือขีดกลาง) ได้อย่างไร
คุณจะลบไฟล์ที่ชื่อไฟล์เริ่มต้นด้วยเครื่องหมายขีดกลาง (ขีดกลางหรือลบ) ได้-อย่างไร ฉันจะเข้าสู่เซิร์ฟเวอร์ OSX ระยะไกลและฉันมีไฟล์นี้ในไดเรกทอรีของฉัน: tohru:~ $ ls -l total 8 -rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help ... ฉันจะลบ--helpจาก CLI ได้อย่างไรในโลก ปัญหานี้เป็นสิ่งที่ฉันเจอในรูปแบบที่แตกต่างกันในบางโอกาสไฟล์เหล่านี้ง่ายต่อการสร้าง แต่ยากที่จะกำจัด ฉันได้ลองใช้แบ็กสแลช rm \-\-help ฉันได้ลองเสนอราคา rm "--help" ฉันจะป้องกันไม่ให้อักขระลบ (ขีดกลางหรือเครื่องหมายขีดคั่น) เป็นตัวเลือกได้อย่างไร

11
ฉันจะใช้คำสั่ง pushd และ popd ได้อย่างไร
อะไรคือการใช้งานจริงของทั้งสองpushdและpopdเมื่อมีข้อได้เปรียบในการใช้ทั้งสองคำสั่งมากกว่าcdและcd -? แก้ไข : ฉันกำลังมองหาตัวอย่างของการใช้งานจริงสำหรับทั้งสองคำสั่งหรือเหตุผลในการเก็บสแต็คกับไดเรกทอรี (เมื่อคุณมีแท็บเสร็จcd -, นามแฝงสำหรับการย่อcd ..ฯลฯ )
332 shell  cd-command  pushd 

5
ทำไมไม่ใช้“ อันไหน”? จะใช้อะไรดี?
เมื่อมองหาเส้นทางไปปฏิบัติการหรือตรวจสอบสิ่งที่จะเกิดขึ้นถ้าคุณใส่ชื่อคำสั่งในเปลือก Unix มีมากมายเหลือเฟือของสาธารณูปโภคที่แตกต่างกัน ( which, type, command, whence, where, whereis, whatis, hashฯลฯ ) เรามักได้ยินว่าwhichควรหลีกเลี่ยง ทำไม? เราควรใช้อะไรแทน

5
ความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอิน?
ฉันเข้าใจถึงความแตกต่างพื้นฐานระหว่างเชลล์แบบโต้ตอบและเชลล์แบบไม่โต้ตอบ แต่สิ่งที่แตกต่างกันอย่างแท้จริงของเปลือกเข้าสู่ระบบจากเปลือกไม่ใช่ - เข้าสู่ระบบ? คุณสามารถให้ตัวอย่างสำหรับการใช้งานของเปลือกโต้ตอบที่ไม่ได้เข้าสู่ระบบได้หรือไม่?
318 shell  login 

10
วิธีต่อท้ายหลายบรรทัดในไฟล์
ฉันกำลังเขียนสคริปต์ทุบตีเพื่อค้นหาไฟล์หากไม่มีอยู่ให้สร้างและผนวกกับมัน: Host localhost ForwardAgent yes ดังนั้น"line then new line 'tab' then text"ฉันคิดว่ามันเป็นรูปแบบที่ละเอียดอ่อน ฉันรู้ว่าคุณสามารถทำได้: cat temp.txt >> data.txt แต่มันดูแปลก ๆ ตั้งแต่สองบรรทัด มีวิธีต่อท้ายที่ในรูปแบบนี้หรือไม่: echo "hello" >> greetings.txt

16
วิธีการคำนวณจำนวนเต็มและลอยในทุบตีหรือภาษา / กรอบอื่น ๆ ?
การใช้echo "20+5"ข้อความจะสร้างข้อความ " 20+5" อย่างแท้จริง ฉันสามารถใช้คำสั่งใดในการรับผลรวมตัวเลข25ในกรณีนี้ นอกจากนี้วิธีที่ง่ายที่สุดในการทำเพียงแค่ใช้ bash สำหรับจุดลอยคืออะไร ตัวอย่างเช่นecho $((3224/3807.0))พิมพ์0:( ฉันกำลังมองหาคำตอบโดยใช้เชลล์คำสั่งพื้นฐาน ('บรรทัดคำสั่ง') เองหรือผ่านการใช้ภาษาที่มีให้จากบรรทัดคำสั่ง

16
รับสถานะทางออกของกระบวนการที่ถูกส่งไปยังกระบวนการอื่น
ฉันมีสองกระบวนการfooและbarเชื่อมต่อกับท่อ: $ foo | bar barออกจาก 0 เสมอ fooฉันสนใจในรหัสทางออกของ มีวิธีใดบ้างที่จะไปถึงที่นั่น?
287 shell  pipe  exit 

5
ทำไมเชลล์สคริปต์ของฉันถึงสำลักในช่องว่างหรืออักขระพิเศษอื่น ๆ
หรือคู่มือแนะนำการจัดการชื่อไฟล์ที่มีประสิทธิภาพและการส่งผ่านสตริงอื่น ๆ ในเชลล์สคริปต์ ฉันเขียนเชลล์สคริปต์ซึ่งทำงานได้ดีเกือบตลอดเวลา แต่มันฉายาบางอินพุต (เช่นชื่อไฟล์บางชื่อ) ฉันพบปัญหาเช่นต่อไปนี้: ฉันมีชื่อไฟล์ที่มีพื้นที่hello worldและมันก็ถือว่าเป็นสองไฟล์แยกต่างหากและhelloworld ฉันมีสายอินพุตพร้อมช่องว่างสองช่องติดต่อกัน ช่องว่างนำหน้าและต่อท้ายหายไปจากบรรทัดอินพุต บางครั้งเมื่ออินพุตมีอักขระหนึ่งตัวอักขระ\[*?เหล่านั้นจะถูกแทนที่ด้วยข้อความบางส่วนซึ่งเป็นชื่อไฟล์จริง มีเครื่องหมายอะโพสโทรฟี'(หรือเครื่องหมายคำพูดคู่") ในอินพุตและสิ่งต่าง ๆ แปลกประหลาดหลังจากจุดนั้น มีแบ็กสแลชในอินพุต (หรือ: ฉันใช้ Cygwin และชื่อไฟล์บางส่วนของฉันมี\ตัวคั่นสไตล์ Windows ) เกิดอะไรขึ้นและฉันจะแก้ไขได้อย่างไร

4
Segmentation Fault ทำงานอย่างไรภายใต้ประทุน?
ฉันไม่สามารถหาข้อมูลใด ๆ นอกเหนือไปจาก "MMU ของ CPU ส่งสัญญาณ" และ "เคอร์เนลนำมันไปยังโปรแกรมที่ละเมิดทำให้ยุติ" "Segmentation fault"ฉันคิดว่ามันอาจจะส่งสัญญาณไปยังเปลือกและเปลือกจัดการกับมันโดยยกเลิกกระบวนการที่กระทำผิดและการพิมพ์ ดังนั้นฉันทดสอบสมมติฐานโดยการเขียนเชลล์ที่น้อยที่สุดที่ฉันเรียกว่าcrsh (crap shell) เชลล์นี้ไม่ได้ทำอะไรเลยนอกจากเอาข้อมูลผู้ใช้และป้อนไปยังsystem()วิธีการ #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } ดังนั้นฉันจึงวิ่งเปลือกนี้ใน terminal เปลือย (โดยไม่ต้องbashวิ่งภายใต้) จากนั้นฉันก็ดำเนินการเรียกใช้โปรแกรมที่สร้าง segfault หากสมมติฐานของฉันถูกต้องสิ่งนี้อาจจะเป็น) ความผิดพลาดcrshปิด xterm, b) ไม่พิมพ์"Segmentation fault"หรือ c) ทั้งสองอย่าง braden@system ~/code/crsh/ …

6
อะไรคือความแตกต่างระหว่าง $ (สิ่งของ) และ `สิ่งของ '?
มีสองไวยากรณ์สำหรับการทดแทนคำสั่ง: ด้วยดอลลาร์วงเล็บและ backticks วิ่งtop -p $(pidof init)และtop -p `pidof init`ให้ผลลัพธ์เดียวกัน มีสองวิธีในการทำสิ่งเดียวกันหรือมีความแตกต่าง?

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