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

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

4
ข้อความตัวหนาหนึ่งเอาต์พุตใน Bash เป็นอย่างไร
ฉันกำลังเขียนสคริปต์ Bash ที่พิมพ์ข้อความไปที่หน้าจอ: echo "Some Text" ฉันสามารถจัดรูปแบบข้อความได้ไหม? ฉันต้องการทำให้เป็นตัวหนา
241 bash  console  formatting  echo 

11
วิธีที่รวดเร็วในการค้นหาบรรทัดในไฟล์หนึ่งที่ไม่ได้อยู่ในอีก?
ฉันมีไฟล์ขนาดใหญ่สองไฟล์ (ชุดชื่อไฟล์) ประมาณ 30,000 บรรทัดในแต่ละไฟล์ ฉันพยายามค้นหาวิธีที่รวดเร็วในการค้นหาบรรทัดใน file1 ที่ไม่ปรากฏใน file2 ตัวอย่างเช่นถ้านี่คือ file1: line1 line2 line3 และนี่คือ file2: line1 line4 line5 ดังนั้นผลลัพธ์ / ผลลัพธ์ของฉันควรเป็น: line2 line3 งานนี้: grep -v -f file2 file1 แต่มันช้ามากเมื่อใช้กับไฟล์ขนาดใหญ่ของฉัน ฉันสงสัยว่ามีวิธีที่ดีในการทำเช่นนี้โดยใช้ diff () แต่ผลลัพธ์ควรเป็นเพียงแค่เส้นไม่มีอะไรอื่นและฉันไม่สามารถหาสวิตช์ได้ ใครช่วยฉันหาวิธีที่รวดเร็วในการทำเช่นนี้โดยใช้ทุบตีและไบนารีลินุกซ์ขั้นพื้นฐาน? แก้ไข: เพื่อติดตามคำถามของฉันนี้เป็นวิธีที่ดีที่สุดที่ฉันได้พบโดยใช้ diff (): diff file2 file1 | grep '^>' | sed 's/^>\ //' …
241 bash  grep  find  diff 


14
การจัดการข้อผิดพลาดใน Bash
อะไรคือวิธีที่คุณชื่นชอบในการจัดการข้อผิดพลาดใน Bash ตัวอย่างที่ดีที่สุดในการจัดการข้อผิดพลาดที่ฉันได้พบในเว็บเขียนโดยวิลเลียมช็อตจูเนียร์ที่http://www.linuxcommand.org เขาแนะนำให้ใช้ฟังก์ชันต่อไปนี้สำหรับการจัดการข้อผิดพลาดใน Bash: #!/bin/bash # A slicker error handling routine # I put a variable in my scripts named PROGNAME which # holds the name of the program being run. You can get this # value from the first item on the command line ($0). # Reference: This …


8
เลือกค่าที่ไม่ซ้ำกันหรือแตกต่างจากรายการในเชลล์สคริปต์ UNIX
ฉันมีสคริปต์ ksh ที่คืนค่ารายการจำนวนมากบรรทัดใหม่คั่นและฉันต้องการเห็นเฉพาะค่าที่ไม่ซ้ำกัน / แตกต่างกัน เป็นไปได้ที่จะทำเช่นนี้? ตัวอย่างเช่นสมมติว่าเอาต์พุตของฉันคือคำต่อท้ายไฟล์ในไดเรกทอรี: tar gz java gz java tar class class ฉันต้องการดูรายการที่ชอบ: tar gz java class
238 bash  unique  distinct  ksh  sh 

6
คำสั่ง unix สำหรับการลบอักขระ N ตัวแรกของบรรทัดคืออะไร
ตัวอย่างเช่นฉันอาจต้องการ: tail -f logfile | grep org.springframework | <command to remove first N characters> ฉันคิดว่าtrอาจมีความสามารถในการทำเช่นนี้ แต่ฉันไม่แน่ใจ
238 bash  unix  command  truncate 


6
คุณจะเรียกใช้คำสั่งในวิธีทุบตีจนสำเร็จ
ฉันมีสคริปต์และต้องการขอข้อมูลจากผู้ใช้สคริปต์ไม่สามารถดำเนินการต่อไปจนกว่าผู้ใช้จะกรอกข้อมูลนี้ ต่อไปนี้เป็นความพยายามของฉันในการวางคำสั่งลงในลูปเพื่อให้ได้สิ่งนี้ แต่มันไม่ทำงานด้วยเหตุผลบางอย่าง echo "Please change password" while passwd do echo "Try again" done ฉันลองวนรอบหลายครั้งแล้ว: while `passwd` while [[ "`passwd`" -gt 0 ]] while [ `passwd` -ne 0 ]] # ... And much more แต่ฉันไม่สามารถทำให้มันใช้งานได้
237 bash  command  while-loop 

9
เทียบเท่ากับ Linux คืออะไร DOS หยุดชั่วคราว?
ฉันมีสคริปต์ Bash shell ที่ฉันต้องการหยุดการทำงานชั่วคราวจนกว่าผู้ใช้จะกดปุ่ม ใน DOS สิ่งนี้สามารถทำได้อย่างง่ายดายด้วยคำสั่ง "หยุดชั่วคราว" มีลินุกซ์เทียบเท่าที่ฉันสามารถใช้ในสคริปต์ของฉันได้หรือไม่
236 linux  bash  shell 

3
เลือกวัตถุตามค่าของตัวแปรในวัตถุโดยใช้ jq
ฉันมีไฟล์ json ต่อไปนี้: { "FOO": { "name": "Donald", "location": "Stockholm" }, "BAR": { "name": "Walt", "location": "Stockholm" }, "BAZ": { "name": "Jack", "location": "Whereever" } } ฉันใช้ jq และต้องการได้รับองค์ประกอบ "ชื่อ" ของวัตถุที่ 'ตำแหน่งที่ตั้ง' คือ 'สตอกโฮล์ม' ฉันรู้ว่าฉันสามารถได้รับชื่อทั้งหมดด้วย cat json | jq .[] | jq ."name" "Jack" "Walt" "Donald" แต่ฉันไม่สามารถหาวิธีพิมพ์เฉพาะวัตถุบางอย่างได้โดยระบุค่าของคีย์ย่อย (ที่นี่"location" : "Stockholm")
236 json  bash  jq 


9
เปลี่ยนเส้นทาง COPY ของ stdout ไปยังล็อกไฟล์จากภายในสคริปต์ทุบตี
ฉันรู้วิธีเปลี่ยนเส้นทาง stdoutเป็นไฟล์: exec > foo.log echo test สิ่งนี้จะนำ 'ทดสอบ' ไปไว้ในไฟล์ foo.log ตอนนี้ฉันต้องการเปลี่ยนเส้นทางผลลัพธ์ไปยังล็อกไฟล์และเก็บไว้ที่ stdout นั่นคือสามารถทำได้เล็กน้อยจากนอกสคริปต์: script | tee foo.log แต่ฉันต้องการประกาศในสคริปต์เอง ฉันเหนื่อย exec | tee foo.log แต่มันไม่ทำงาน
235 bash  shell  redirect  logging 

6
“ find: พา ธ ต้องนำหน้านิพจน์:” ฉันจะระบุการค้นหาแบบเรียกซ้ำที่ค้นหาไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร
ฉันมีปัญหาในการค้นหาเพื่อค้นหาการจับคู่ในไดเรกทอรีปัจจุบันเช่นเดียวกับไดเรกทอรีย่อย เมื่อฉันเรียกใช้find *test.cจะให้เฉพาะรายการที่ตรงกันในไดเรกทอรีปัจจุบัน (ไม่ดูในไดเรกทอรีย่อย) หากฉันลองfind . -name *test.cฉันจะคาดหวังผลลัพธ์เดียวกัน แต่จะให้เฉพาะการจับคู่ที่อยู่ในไดเรกทอรีย่อยแทน เมื่อมีไฟล์ที่ควรจะตรงกับในไดเร็คทอรี่สำหรับใช้ทำงานมันจะทำให้ฉัน:find: paths must precede expression: mytest.c ข้อผิดพลาดนี้หมายถึงอะไรและฉันจะได้รับการแข่งขันจากทั้งไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยได้อย่างไร
235 linux  bash  find 

5
จะไปป์ stdout ขณะที่เก็บไว้บนหน้าจอได้อย่างไร (และไม่ใช่ไฟล์เอาต์พุต)
ฉันต้องการส่งออกมาตรฐานของโปรแกรมในขณะที่เก็บไว้บนหน้าจอ ด้วยตัวอย่างง่ายๆ ( echoใช้ที่นี่เป็นเพียงภาพประกอบเท่านั้น): $ echo 'ee' | foo ee <- ผลลัพธ์ที่ฉันต้องการดู ฉันรู้ว่าทีสามารถคัดลอก stdout ไปยังไฟล์ได้ แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ $ echo 'ee' | tee output.txt | foo ฉันพยายาม $ echo 'ee' | tee /dev/stdout | fooแต่มันใช้งานไม่ได้ตั้งแต่เอาท์พุททีไป/dev/stdoutเป็น pipfoo
234 bash  shell  pipe  output  stdout 

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