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

สำหรับคำถามเกี่ยวกับสคริปต์ที่เขียนขึ้นสำหรับเชลล์คำสั่ง Bash สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาด / ข้อผิดพลาดทางไวยากรณ์โปรดตรวจสอบด้วยโปรแกรม shellcheck (หรือในเซิร์ฟเวอร์ shellcheck เว็บที่ https://shellcheck.net) ก่อนโพสต์ที่นี่ คำถามเกี่ยวกับการใช้งานอินเทอร์แอคทีฟของ Bash นั้นมีแนวโน้มที่จะอยู่ในหัวข้อของผู้ใช้ขั้นสูงมากกว่าในสแต็คโอเวอร์โฟลว์

6
แตกต่างเอาต์พุตจากสองโปรแกรมโดยไม่มีไฟล์ชั่วคราว
ว่าฉันมีมากเกินไปโปรแกรมaและbที่ฉันสามารถทำงานด้วยและ./a./b เป็นไปได้หรือไม่ที่จะกระจายเอาท์พุทโดยไม่ต้องเขียนลงไฟล์ชั่วคราวก่อน?
145 bash  file  diff 

13
จะตรวจสอบขนาดของไฟล์โดยใช้ Bash ได้อย่างไร?
ฉันมีสคริปต์ที่ตรวจสอบขนาด 0 แต่ฉันคิดว่าต้องมีวิธีที่ง่ายกว่าในการตรวจสอบขนาดไฟล์แทน เช่นfile.txtปกติแล้วคือ 100k; วิธีการตรวจสอบสคริปต์ว่าน้อยกว่า 90k (รวมถึง 0) และทำสำเนาใหม่เพราะไฟล์เสียหายในกรณีนี้ สิ่งที่ฉันกำลังใช้ .. if [ -n file.txt ] then echo "everything is good" else mail -s "file.txt size is zero, please fix. " myemail@gmail.com < /dev/null # Grab wget as a fallback wget -c https://www.server.org/file.txt -P /root/tmp --output-document=/root/tmp/file.txt mv -f /root/tmp/file.txt …
145 bash 

10
ฉันจะลบนามสกุลไฟล์ในเชลล์สคริปต์ได้อย่างไร
มีอะไรผิดปกติกับรหัสต่อไปนี้? name='$filename | cut -f1 -d'.'' ตามที่ฉันได้รับสายตัวอักษร$filename | cut -f1 -d'.'แต่ถ้าฉันลบอัญประกาศฉันไม่ได้รับอะไร ในขณะเดียวกันพิมพ์ "test.exe" | cut -f1 -d'.' ในเชลล์ให้ผลลัพธ์ที่ฉันต้องการ, test. ฉันรู้แล้วว่า$filenameได้รับการกำหนดค่าที่เหมาะสม สิ่งที่ฉันต้องการจะทำคือกำหนดตัวแปรชื่อไฟล์ที่ไม่มีนามสกุล
145 bash  shell  sh  cut  gnu-coreutils 

15
วิธีขยายตัวแปรพิเศษด้วยตนเอง (เช่น ~ tilde) ใน bash
ฉันมีตัวแปรในสคริปต์ทุบตีของฉันซึ่งมีค่าเป็นดังนี้: ~/a/b/c สังเกตว่ามันเป็นเครื่องหมายทิลเดอที่ไม่ขยาย เมื่อฉันทำ ls -lt กับตัวแปรนี้ (เรียกมันว่า $ VAR) ฉันไม่พบไดเร็กทอรีดังกล่าว ฉันต้องการให้ bash ตีความ / ขยายตัวแปรนี้โดยไม่ต้องดำเนินการ กล่าวอีกนัยหนึ่งฉันต้องการให้ bash เรียกใช้ eval แต่ไม่ได้เรียกใช้คำสั่งที่ประเมิน เป็นไปได้ในการทุบตี? ฉันจะจัดการส่งสิ่งนี้ไปยังสคริปต์ของฉันโดยไม่ขยายได้อย่างไร ฉันส่งผ่านอาร์กิวเมนต์โดยรอบด้วยเครื่องหมายคำพูดคู่ ลองใช้คำสั่งนี้เพื่อดูว่าฉันหมายถึงอะไร: ls -lt "~" นี่คือสถานการณ์ที่ฉันอยู่ฉันต้องการให้ตัวหนอนขยาย กล่าวอีกนัยหนึ่งฉันควรแทนที่เวทมนตร์ด้วยอะไรเพื่อให้คำสั่งทั้งสองนี้เหมือนกัน: ls -lt ~/abc/def/ghi และ ls -lt $(magic "~/abc/def/ghi") โปรดทราบว่า ~ / abc / def / ghi อาจมีหรือไม่มีอยู่

4
แยกไฟล์โดยใช้ tar, gz, zip หรือ bzip2 [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน11 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันต้องการบีบอัดไฟล์ขนาดใหญ่ประมาณ 17-20 GB ฉันต้องแบ่งไฟล์ออกเป็นหลายไฟล์ประมาณ 1GB ต่อไฟล์ ฉันค้นหาวิธีการแก้ปัญหาผ่าน Google และพบวิธีการใช้splitและcatคำสั่ง แต่พวกเขาไม่สามารถใช้งานไฟล์ขนาดใหญ่ได้เลย นอกจากนี้พวกมันจะไม่ทำงานใน Windows ฉันต้องการที่จะดึงมันบนเครื่อง Windows

10
จะไปยังแต่ละไดเรกทอรีและดำเนินการคำสั่งได้อย่างไร
ฉันจะเขียนสคริปต์ทุบตีที่ผ่านแต่ละไดเรกทอรีภายใน parent_directory และดำเนินการคำสั่งในแต่ละไดเรกทอรีได้อย่างไร โครงสร้างไดเรกทอรีเป็นดังนี้: parent_directory (ชื่อสามารถเป็นอะไรก็ได้ - ไม่เป็นไปตามรูปแบบ) 001 (ชื่อไดเรกทอรีตามรูปแบบนี้) 0001.txt (ชื่อไฟล์เป็นไปตามรูปแบบนี้) 0002.txt 0003.txt 002 0001.txt 0002.txt 0003.txt 0004.txt 003 0001.txt ไม่ทราบจำนวนไดเรกทอรี
144 bash  shell  unix  find 

7
อักขระ Grep ก่อนและหลังการแข่งขัน?
ใช้สิ่งนี้: grep -A1 -B1 "test_pattern" file จะสร้างหนึ่งบรรทัดก่อนและหลังรูปแบบที่ตรงกันในไฟล์ มีวิธีการแสดงไม่ใช่บรรทัด แต่มีจำนวนอักขระที่ระบุหรือไม่ เส้นในไฟล์ของฉันค่อนข้างใหญ่ดังนั้นฉันจึงไม่สนใจที่จะพิมพ์ทั้งบรรทัด แต่ให้สังเกตเฉพาะการจับคู่ในบริบทเท่านั้น ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการทำเช่นนี้?
144 bash  grep 


3
มีวิธีทำให้ลิงค์สามารถคลิกได้ใน OSX Terminal หรือไม่?
ฉันกำลังวางแผนที่จะพัฒนาฟอร์แมต Mxmlc เป็น Textmate ซึ่งจัดรูปแบบข้อผิดพลาด mxmlc เป็นลิงก์ที่คลิกได้เพื่อให้คุณสามารถเปิดได้อย่างรวดเร็วใน Textmate เนื่องจาก Textmate มีรูปแบบ URL เช่น: txmt: // open /? url = file: // ~ / .bash_profile & line = 11 & column = 2. ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะแสดงลิงก์ในเทอร์มินัล OSX ของคุณซึ่งสามารถคลิกได้เช่นโดยการเปลี่ยนตัวแปร PS1 หรือมากกว่านั้น ปล. ฉันไม่ต้องการใช้ HTML ที่ทำงานในสภาพแวดล้อม Textmate
144 bash  macos  terminal  textmate 

7
วิธีดาวน์โหลดไดเรกทอรีและไดเรกทอรีย่อยทั้งหมดโดยใช้ wget
ฉันกำลังพยายามดาวน์โหลดไฟล์สำหรับโครงการที่ใช้wgetเนื่องจากเซิร์ฟเวอร์ SVN สำหรับโครงการนั้นไม่ทำงานอีกต่อไปและฉันสามารถเข้าถึงไฟล์ผ่านเบราว์เซอร์เท่านั้น URL หลักสำหรับไฟล์ทั้งหมดนั้นเหมือนกัน http://abc.tamu.edu/projects/tzivi/repository/revisions/2/raw/tzivi/ * ฉันจะใช้wget(หรือเครื่องมืออื่นที่คล้ายคลึงกัน) เพื่อดาวน์โหลดไฟล์ทั้งหมดในที่เก็บนี้ได้อย่างไรโดยที่โฟลเดอร์ "tzivi" เป็นโฟลเดอร์รูทและมีไฟล์และโฟลเดอร์ย่อยหลายไฟล์ (ไม่เกิน 2 หรือ 3 ระดับ) ภายใต้มัน
143 regex  linux  bash  wget 

3
คุณจะแตกต่างสองท่อใน Bash ได้อย่างไร
คุณจะแตกต่างสองท่อได้อย่างไรโดยไม่ต้องใช้ไฟล์ชั่วคราวใน Bash สมมติว่าคุณมีท่อคำสั่งสองท่อ: foo | bar baz | quux และคุณต้องการค้นหาdiffผลลัพธ์ของมัน ทางออกหนึ่งที่เห็นได้ชัดคือ: foo | bar > /tmp/a baz | quux > /tmp/b diff /tmp/a /tmp/b เป็นไปได้ไหมที่จะไม่ใช้ไฟล์ชั่วคราวใน Bash? คุณสามารถกำจัดไฟล์ชั่วคราวหนึ่งไฟล์โดยการไพพ์ในไพพ์ไลน์ใดไฟล์หนึ่งเพื่อ diff: foo | bar > /tmp/a baz | quux | diff /tmp/a - แต่คุณไม่สามารถท่อทั้งสองแยกเป็น diff พร้อมกัน (อย่างน้อยก็ในลักษณะที่ไม่ชัดเจน) มีเคล็ดลับที่ฉลาดเกี่ยวกับ/dev/fdการทำเช่นนี้โดยไม่ใช้ไฟล์ชั่วคราวหรือไม่?
143 bash  diff  pipeline 

5
วิธีการสร้างช่วงที่มีขั้นตอน n ในทุบตี? (สร้างลำดับของตัวเลขพร้อมส่วนเพิ่ม)
วิธีที่จะทำซ้ำในช่วงทุบตีคือ for i in {0..10}; do echo $i; done สิ่งที่จะเป็นไวยากรณ์สำหรับการวนซ้ำในลำดับที่มีขั้นตอนหรือไม่ บอกเด็ก ๆ ว่าฉันต้องการได้เลขคู่ในตัวอย่างด้านบน
143 bash  range  iteration 

1
วิธีจัดการเพจ gzipped อย่างถูกต้องเมื่อใช้ curl?
ฉันเขียนสคริปต์ทุบตีที่ได้รับผลลัพธ์จากเว็บไซต์โดยใช้ curl และทำการจัดการสตริงจำนวนมากบนเอาต์พุต html ปัญหาคือเมื่อฉันรันกับไซต์ที่ส่งคืนเอาต์พุต gzipped ไปที่ไซต์ในเบราว์เซอร์ทำงานได้ดี เมื่อฉันใช้ curl ด้วยมือฉันจะได้รับเอาต์พุต gzipped: $ curl "http://example.com" นี่คือส่วนหัวจากไซต์นั้น ๆ : HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 X-Powered-By: PHP/5.2.17 Last-Modified: Sat, 03 Dec 2011 00:07:57 GMT ETag: "6c38e1154f32dbd9ba211db8ad189b27" Expires: Sun, 19 Nov 1978 05:00:00 GMT Cache-Control: must-revalidate Content-Encoding: gzip Content-Length: 7796 Date: …
143 bash  curl  gzip 

6
ฉันจะทำการหารด้วยตัวแปรในเชลล์ลินุกซ์ได้อย่างไร
เมื่อฉันเรียกใช้คำสั่งในเชลล์ของฉันดังต่อไปนี้จะส่งคืนexpr: non-integer argumentข้อผิดพลาด ใครช่วยอธิบายเรื่องนี้ให้ฉันฟังหน่อยได้ไหม $ x=20 $ y=5 $ expr x / y expr: non-integer argument

9
ความคิดเห็นแบบอินไลน์สำหรับ Bash?
ฉันต้องการที่จะสามารถออกความเห็นธงเดียวในคำสั่งบรรทัดเดียว Bash ดูเหมือนจะมีfrom # till end-of-lineความคิดเห็นเท่านั้น ฉันกำลังดูเทคนิคที่ชอบ: ls -l $([ ] && -F is turned off) -a /etc มันน่าเกลียด แต่ดีกว่าไม่มีอะไร มีวิธีที่ดีกว่า? ดูเหมือนว่าจะทำงานต่อไปนี้ แต่ฉันไม่แน่ใจว่ามันเป็นแบบพกพา: ls -l `# -F is turned off` -a /etc
142 bash  comments 

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