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

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


2
CTRL + 4 (และ CTRL + \) ทำอะไรในทุบตี?
ฉันเพิ่งค้นพบโดยบังเอิญว่าCTRL+ 4 ปิดโปรแกรมที่อ่านstdinอินพุตจากบรรทัดคำสั่ง นี่คือลักษณะเมื่อฉันพิมพ์CTRL+ 4หรือCTRL+ / ลงในโปรแกรมที่อ่านstdin $ cat wefwef wefwef ^\Quit $ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. ^\Quit $ ฉัน^\Quitปรากฏขึ้นจากนั้นโปรแกรมก็ปิด ความแตกต่างของสิ่งนี้เมื่อเทียบกับการใช้^Cหรือ^D? อะไร^\Quitทำอย่างไร แก้ไข : พบว่าCTRL+ \ทำสิ่งเดียวกันมาก

3
ออกข้อผิดพลาดเมื่อใช้ตัวแปรเชลล์ที่ว่างเปล่า
บางครั้งฉันก็ใช้$PROJECT_HOME/*เพื่อลบไฟล์ทั้งหมดในโครงการ เมื่อตัวแปรสภาพแวดล้อมPROJECT_HOMEไม่ได้ถูกตั้งค่า (เพราะฉันทำsuและผู้ใช้ใหม่ไม่มีชุดตัวแปรสภาพแวดล้อมนี้) จึงเริ่มลบไฟล์ทั้งหมดจากโฟลเดอร์รูท นี่คือสันทราย ฉันbashจะกำหนดค่าให้เกิดข้อผิดพลาดได้อย่างไรเมื่อฉันใช้ตัวแปรสภาพแวดล้อมที่ไม่ได้กำหนดในเชลล์?

2
รูปแบบสำหรับการส่งข้อความไปยัง sendmail คืออะไร?
ฉันใช้คำสั่งต่อไปนี้เพื่อสร้างข้อความได้ทันทีและส่งพวกเขา: echo "Subject:Hello \n\n I would like to buy a hamburger\n" | sendmail email@example.com ดูเหมือนว่าเมื่อคุณส่งข้อมูลจากไฟล์โดยทำสิ่งที่ชอบ: sendmail email@example.com mail.txt จากนั้น sendmail จะเห็นแต่ละบรรทัดเป็นส่วนหัวและแยกวิเคราะห์ แต่วิธีที่ฉันส่งไปด้านบนทุกอย่างจบลงในหัวเรื่อง หากต้องการสะท้อนข้อความที่มีส่วนหัวให้เป็น sendmail แล้วรูปแบบคืออะไร เราจะทำอย่างไร
22 shell  email  sendmail  echo 

4
ทดสอบ unix เมื่อใดควรใช้ eq vs = vs == ในคำสั่งทดสอบ?
เมื่อใดที่ฉันควรใช้-eqvs =vs== เช่น [[ $num -eq 0 ]] [[ $num = 'zzz' ]] ฉันสังเกตรูปแบบการใช้-eq(และ-neอื่น ๆ ) สำหรับตัวเลขและ=สตริง มีเหตุผลสำหรับสิ่งนี้และเมื่อใดที่ฉันควรใช้==
22 shell  test 

2
เพิ่มอาร์กิวเมนต์ให้กับ 'bash -c'
สมมติว่าฉันต้องการเรียกใช้คำสั่งผ่าน Bash ดังนี้: /bin/bash -c "ls -l" ตามหน้า Bash man ฉันก็สามารถเรียกใช้เช่นนี้: # don't process arguments after this one # | pass all unprocessed arguments to command # | | # V V /bin/bash -c ls -- -l ยกเว้นดูเหมือนว่าจะไม่ทำงาน (ดูเหมือนจะถูกละเว้น) ฉันกำลังทำอะไรผิดหรือฉันตีความหน้าคนผิดหรือเปล่า? คำพูดที่เกี่ยวข้องจากมนุษย์: หากมีอ็อพชัน -c อยู่คำสั่งจะอ่านจากสตริง หากมีข้อโต้แย้งหลังจากสตริงพวกเขาจะถูกกำหนดให้กับพารามิเตอร์ตำแหน่งเริ่มต้นด้วย $ 0 และ เอ - …

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

7
หาเชลล์ในสคริปต์ระหว่างรันไทม์
ตามความรู้ของฉันเพื่อกำหนดเชลล์ปัจจุบันที่เราใช้echo $0ในเชลล์ ค่อนข้างฉันต้องการสคริปต์ของฉันเพื่อตรวจสอบว่าเปลือกมันทำงานอยู่ ดังนั้นฉันพยายามพิมพ์$0ในสคริปต์และส่งคืนชื่อสคริปต์เท่าที่ควร ดังนั้นคำถามของฉันคือฉันจะหาเชลล์ที่สคริปต์ของฉันทำงานในระหว่างรันไทม์ได้อย่างไร
22 linux  shell  ksh 

2
วิธีการทำ for loop ใน command line?
ลองทำง่ายๆ for loop #!/bin/bash for i in `seq 1 10`; do echo $i done อัฒภาค AFAIK ในสคริปต์ทุบตีทำให้เชลล์เรียกใช้คำสั่งปัจจุบันแบบซิงโครนัสแล้วไปที่คำสั่งถัดไป การกด Enter จะทำเช่นเดียวกันยกเว้นจะไม่อนุญาตให้คุณป้อนคำสั่งต่อไปนี้โดยล้างบัฟเฟอร์ทันที ดังนั้นทำไมเชลล์ไม่สามารถตีความบรรทัดต่อไปนี้ for i in `seq 1 10`; do; echo $i; done มันfor loopใช้งานได้จริงอย่างไร
22 bash  shell 

2
ในทุบตีอ่านหลังจากท่อไม่ได้ตั้งค่า
แก้ไข: ชื่อเดิมคือ "อ่านล้มเหลวในการทุบตี" ด้วย ksh ฉันใช้อ่านเป็นวิธีที่สะดวกในการแยกค่า: $ echo 1 2 3 4 5 | read a b dump $ echo $b $a 2 1 $ แต่มันล้มเหลวในการทุบตี: $ echo 1 2 3 4 5 | read a b dump $ echo $b $a $ ฉันไม่พบเหตุผลในหน้าคู่มือทำไมจึงล้มเหลวความคิดใด ๆ
22 bash  shell  pipe  read 



1
เป็น ((…)) {…;} ไวยากรณ์เชลล์ที่ถูกต้องหรือไม่ หอยไหน?
การแสดงออก: $ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}' 0 1 2 3 4 ทำงานอย่างถูกต้อง ฉันล้มเหลวในการค้นหาคำอธิบายของไวยากรณ์นี้ซึ่ง{...;}แทนที่ด้วย; do ...; doneในคู่มือ มีการอ้างอิงในคู่มือหรือไม่? เชลล์ใดที่ทำงานได้ถูกต้อง?
21 bash  shell  zsh  ksh 

10
Shell: เป็นไปได้ไหมที่จะชะลอคำสั่งโดยไม่ใช้ `sleep '?
มีการทดแทนทางเลือกหรือเทคนิคทุบตีสำหรับการชะลอคำสั่งโดยไม่ใช้sleepหรือไม่? ตัวอย่างเช่นการแสดงคำสั่งด้านล่างโดยไม่ใช้สลีปจริง: $ sleep 10 && echo "This is a test"

2
+/- หลังจากงานในพื้นหลังเสร็จสิ้น
รันงานในพื้นหลัง $ command & เมื่อเสร็จสิ้นเครื่องจะพิมพ์ออกมา [n]+ command หรือ [n]- command ดังนั้นบางครั้งมันเป็นบวกและครั้งอื่น ๆ [n]มันเป็นดังต่อไปนี้ลบ บวก / ลบหมายความว่าอย่างไร

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