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

คำว่า 'เชลล์' หมายถึงคลาสทั่วไปของล่ามคำสั่งแบบโต้ตอบตามข้อความซึ่งส่วนใหญ่มักเกี่ยวข้องกับระบบปฏิบัติการ Unix & Linux สำหรับคำถามเกี่ยวกับการเขียนสคริปต์เชลล์โปรดใช้แท็กเฉพาะเพิ่มเติมเช่น 'bash', 'powershell' หรือ 'ksh' หากไม่มีแท็กเฉพาะควรใช้วิธีแก้ปัญหาแบบพกพา (POSIX-compliant) แม้ว่าจะใช้ 'posix' เพิ่มเติมหรือ 'sh' แทนก็ตาม

13
คำสั่งเพื่อรับบรรทัดที่ n ของ STDOUT
มีคำสั่ง bash ใดบ้างที่จะให้คุณได้บรรทัดที่ n ของ STDOUT? กล่าวคือสิ่งที่จะใช้เวลานี้ $ ls -l -rw-r--r--@ 1 root wheel my.txt -rw-r--r--@ 1 root wheel files.txt -rw-r--r--@ 1 root wheel here.txt และทำสิ่งที่ชอบ $ ls -l | magic-command 2 -rw-r--r--@ 1 root wheel files.txt ฉันรู้ว่าสิ่งนี้จะเป็นวิธีปฏิบัติที่ไม่ดีเมื่อเขียนสคริปต์เพื่อนำมาใช้ซ้ำ แต่เมื่อทำงานกับเชลล์แบบวันต่อวันมันจะมีประโยชน์สำหรับฉันที่จะกรอง STDOUT ของฉันในลักษณะนี้ ฉันก็รู้ว่านี่จะเป็นคำสั่งแบบกึ่ง ๆ เขียน (buffer STDOUT ส่งคืนบรรทัดที่ระบุ) แต่ฉันต้องการทราบว่ามีคำสั่งเชลล์มาตรฐานบางอย่างที่จะทำสิ่งนี้ซึ่งจะพร้อมใช้งานโดยที่ฉันไม่ปล่อยสคริปต์ลง
210 bash  shell  sed  stdout 


6
ฉันจะใช้ไวยากรณ์ Bash ในเป้าหมาย Makefile ได้อย่างไร
ฉันมักจะพบทุบตีdiff <(sort file1) <(sort file2)ไวยากรณ์ประโยชน์มากเปลี่ยนตัวกระบวนการเช่นเหมือนใน เป็นไปได้ไหมที่จะใช้คำสั่ง Bash ใน Makefile ฉันกำลังคิดถึงสิ่งนี้: file-differences: diff <(sort file1) <(sort file2) > $@ ใน GNU Make 3.80 ของฉันนี่จะทำให้เกิดข้อผิดพลาดเนื่องจากใช้shellแทนbashการใช้คำสั่ง
208 bash  shell  makefile 

10
find: อาร์กิวเมนต์ที่ขาดหายไปถึง -exec
ฉันได้รับความช่วยเหลือในวันนี้ด้วยคำสั่ง แต่ดูเหมือนจะไม่ทำงาน นี่คือคำสั่ง: find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {}\; เชลล์ส่งคืน find: missing argument to `-exec' สิ่งที่ฉันพยายามทำโดยทั่วไปคือไปที่ไดเรกทอรีซ้ำ (ถ้ามีไดเรกทอรีอื่น) และเรียกใช้คำสั่ง ffmpeg กับ.rmประเภทไฟล์และแปลงเป็น.mp3ประเภทไฟล์ เมื่อเสร็จแล้วให้ลบ.rmไฟล์ที่เพิ่งถูกแปลง ฉันขอขอบคุณความช่วยเหลือในเรื่องนี้
206 bash  shell  find  arguments  exec 

5
การอ่านสตริงที่มีการคั่นลงในอาร์เรย์ใน Bash
ฉันมีตัวแปรที่มีสตริงคั่นด้วยช่องว่าง: line="1 1.50 string" ฉันต้องการแยกสตริงนั้นด้วยช่องว่างเป็นตัวคั่นและเก็บผลลัพธ์ไว้ในอาร์เรย์ดังนั้นต่อไปนี้: echo ${arr[0]} echo ${arr[1]} echo ${arr[2]} เอาท์พุท 1 1.50 string บางแห่งฉันพบวิธีแก้ปัญหาที่ใช้งานไม่ได้: arr=$(echo ${line}) ถ้าฉันใช้คำสั่ง echo ข้างต้นหลังจากนี้ฉันจะได้รับ: 1 1.50 string [empty line] [empty line] ฉันก็ลอง IFS=" " arr=$(echo ${line}) ด้วยผลลัพธ์เดียวกัน มีคนช่วยได้ไหม
206 arrays  string  bash  shell 

3
Ubuntu บอกว่า“ bash: ./program ปฏิเสธการอนุญาต” [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ผมใช้ Ubuntu บนเครื่องคอมพิวเตอร์ 1 เครื่องและคอมพิวเตอร์ 2. ฉันรวบรวมโปรแกรม C ++ ได้บนเครื่องคอมพิวเตอร์ 1 ./program_nameและฉันสามารถดำเนินการได้จากท่าเรือโดยใช้ มันทำงานได้ดี อย่างไรก็ตามเมื่อฉันพยายามทำสิ่งนี้บนคอมพิวเตอร์ 2 มันบอกว่า: bash: ./program_name: permission denied มีอะไรผิดปกติและฉันควรทำอย่างไร
206 bash  shell  sh 

7
ต้องใช้อักขระใดบ้างเมื่อใช้ Bash
มีรายการที่ครอบคลุมของตัวละครที่ต้องหลบหนีใน Bash หรือไม่? สามารถตรวจสอบได้ด้วยsedหรือไม่ โดยเฉพาะอย่างยิ่งฉันกำลังตรวจสอบว่า%จำเป็นต้องหลบหนีหรือไม่ ฉันเหนื่อย echo "h%h" | sed 's/%/i/g' %และทำงานได้ดีโดยไม่ต้องหลบหนี มันหมายความว่า%ไม่จำเป็นต้องหลบหนี? นี่เป็นวิธีที่ดีในการตรวจสอบความจำเป็นหรือไม่? และอื่น ๆ โดยทั่วไป: พวกเขาเป็นตัวละครเดียวที่จะหลบหนีในshellและbash?

5
ฉันจะเปลี่ยนทิศทางเอาต์พุตของเชลล์สคริปต์ทั้งหมดภายในสคริปต์ได้อย่างไร?
เป็นไปได้หรือไม่ที่จะเปลี่ยนเส้นทางเอาต์พุตทั้งหมดของเชลล์สคริปต์ Bourne ไปยังที่อื่น แต่ด้วยคำสั่งเชลล์ภายในสคริปต์เอง? การเปลี่ยนเส้นทางเอาต์พุตของคำสั่งเดียวนั้นง่าย แต่ฉันต้องการอะไรมากกว่านี้: #!/bin/sh if [ ! -t 0 ]; then # redirect all of my output to a file here fi # rest of script... ความหมาย: หากสคริปต์รันแบบไม่โต้ตอบ (เช่น cron) ให้บันทึกเอาต์พุตของทุกสิ่งลงในไฟล์ หากเรียกใช้แบบโต้ตอบจากเชลล์ให้เอาต์พุตไปที่ stdout ตามปกติ ฉันต้องการทำสิ่งนี้สำหรับสคริปต์ที่รันตามปกติโดยยูทิลิตี้ FreeBSD เป็นระยะ ๆ เป็นส่วนหนึ่งของการทำงานประจำวันซึ่งปกติฉันไม่สนใจที่จะเห็นทุกวันทางอีเมลดังนั้นฉันจึงไม่ได้ส่ง อย่างไรก็ตามหากบางสิ่งบางอย่างในสคริปต์นี้ล้มเหลวสิ่งสำคัญสำหรับฉันและฉันต้องการที่จะสามารถจับภาพและส่งอีเมลผลลัพธ์ของส่วนหนึ่งของงานประจำวันนี้ ปรับปรุง: คำตอบของโจชัวเป็นจุดบน แต่ฉันยังต้องการบันทึกและคืนค่า stdout และ stderr รอบสคริปต์ทั้งหมดซึ่งจะทำเช่นนี้: …
205 shell 




5
ตรวจสอบว่าสตริงตรงกับ regex ใน Bash script หรือไม่
หนึ่งในข้อโต้แย้งที่สคริปต์ของฉันได้รับคือวันที่ในรูปแบบต่อไปนี้: yyyymmddหนึ่งของการขัดแย้งที่สคริปต์ของฉันได้รับคือวันในรูปแบบต่อไปนี้: ฉันต้องการตรวจสอบว่าฉันได้รับวันที่ถูกต้องเป็นอินพุตหรือไม่ ฉันจะทำสิ่งนี้ได้อย่างไร ฉันพยายามใช้ regex เช่น:[0-9]\{\8}
204 regex  bash  shell  scripting 



12
วิธีการประเมินรหัสตอบสนอง http จาก bash / shell script?
ฉันรู้สึกว่าฉันขาดความชัดเจน แต่ไม่ประสบความสำเร็จman [curl|wget]หรือ Google ("http" ทำให้ข้อความค้นหาไม่ดี) ฉันกำลังมองหาการแก้ไขอย่างรวดเร็วและสกปรกให้กับหนึ่งในเว็บเซิร์ฟเวอร์ของเราที่ล้มเหลวบ่อยครั้งส่งคืนรหัสสถานะ 500 พร้อมข้อความแสดงข้อผิดพลาด เมื่อสิ่งนี้เกิดขึ้นจะต้องเริ่มต้นใหม่ เนื่องจากสาเหตุที่หาได้ยากเรากำลังเล็งการแก้ไขอย่างรวดเร็วโดยหวังว่ามันจะเพียงพอที่จะเชื่อมโยงเวลาจนกว่าเราจะสามารถแก้ไขได้จริง ๆ (บริการไม่ต้องการความพร้อมใช้งานสูง) เสนอวิธีการแก้ปัญหาคือการสร้างงาน cron ที่ทำงานทุกๆ 5 นาทีตรวจสอบhttp: // localhost: 8080 / หากสิ่งนี้กลับมาพร้อมกับรหัสสถานะ 500 เว็บเซิร์ฟเวอร์จะเริ่มต้นใหม่ เซิร์ฟเวอร์จะรีสตาร์ทภายในไม่กี่นาทีจึงไม่จำเป็นต้องตรวจสอบว่ามีการรีสตาร์ทแล้ว เซิร์ฟเวอร์ที่มีปัญหาคือการติดตั้งน้อยที่สุดของ Ubuntu 8.04 โดยมีแพ็คเกจเพียงพอที่จะติดตั้งเพื่อให้ทำงานตามที่ต้องการในปัจจุบัน ไม่มีความต้องการที่ยากในการทำงานใน bash แต่ฉันต้องการให้ทำงานในสภาพแวดล้อมที่น้อยที่สุดโดยไม่ต้องติดตั้งล่ามอีกต่อไป (ฉันคุ้นเคยกับการเขียนสคริปต์เพียงพอแล้วว่าคำสั่ง / ตัวเลือกในการกำหนดรหัสสถานะ http ให้กับตัวแปรสภาพแวดล้อมจะเพียงพอ - นี่คือสิ่งที่ฉันค้นหาและไม่พบ)
203 http  bash  shell  http-headers 

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