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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

1
เขียนคำสั่งที่มีโครงสร้างในหลายบรรทัดโดยเปิดใช้งานคีย์แท็บ
ฉันต้องการเขียนคำสั่งแบบมีโครงสร้างในหลายบรรทัดเช่น $ for i in *; → do → file $i; → done bmdt.md: ASCII text breakfast.md: ASCII text brmdh.md: ASCII text test.sh: Bourne-Again shell script text executable, ASCII text แต่หาแท็บไม่ทำงาน ฉันจะเปิดใช้งานคีย์แท็บในคอนโซลทุบตีได้อย่างไร
10 bash 


2
อ่านบันทึกจากกระบวนการหนึ่งระหว่างการรันคำสั่งบางอย่าง
logs.logฉันมีบริการบางส่วนซึ่งเป็นผู้ผลิตบันทึกในไฟล์ ฉันมีคำสั่งอื่นที่โต้ตอบกับบริการนี้ foo.shสมมติว่ามันเป็นบางส่วน สิ่งที่ฉันต้องการคือการตัดและบันทึกบันทึกจากlogs.logว่าในระหว่างการfoo.shทำงาน กล่าวอีกนัยหนึ่งฉันต้องการบันทึกส่วนหนึ่งของบริการเมื่อมีการโต้ตอบกับของฉันfoo.sh(ดังนั้นฉันไม่สนใจfoo.shบันทึกของ) ฉันคาดว่าคำสั่งนี้จะทำเคล็ดลับ แต่มันยังคงอ่านไฟล์เมื่อfoo.shเสร็จแล้ว: > foo.sh | tail -f logs.log > foo_part.log เป็นวิธีที่ดีในการทำเคล็ดลับนี้หรือไม่?
10 bash  tail 

3
`_` ตัวแปรสภาพแวดล้อมของ bash shell เมื่อใด
Bash Manual พูดว่า (manpage, การเน้นของฉัน): เมื่อ Bash เรียกใช้คำสั่งภายนอกตัวแปร$_จะถูกตั้งค่าเป็นชื่อพา ธ เต็มของคำสั่งและส่งไปยังคำสั่งนั้นในสภาพแวดล้อมของมัน และ ( พารามิเตอร์พิเศษ ): _ ( $_ขีดล่าง.) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือสคริปต์เชลล์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ ต่อจากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังตั้งเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้เก็บชื่อของไฟล์เมล ใน bash shell ฉันรัน: $ bash $ export | grep '_=' ตามคู่มือ_ควรเป็นตัวแปรสภาพแวดล้อมของ bash shell ใหม่ exportควรจะส่งออกทั้งหมดตัวแปรสภาพแวดล้อมของเปลือกทุบตีใหม่ _แต่มันไม่ออก ดังนั้นฉันสงสัยว่า_ตัวแปรสภาพแวดล้อมของ bash shell ใหม่เป็นอย่างไร ที่จริงแล้วใน bash shell ใด …

1
ฉันจะยกเลิกรายการคำสั่งที่เหลือใน Bash ได้อย่างไร?
ใน Bash บางครั้งฉันจะพิมพ์รายการคำสั่งและการเข้าชมEnterและต่อมาก็ตระหนักว่ามีข้อผิดพลาดบางคำสั่งใกล้จะจบรายการ ฉันรู้ว่าถ้าฉันกดCtrl+ Cมันจะยุติคำสั่งที่กำลังทำงานอยู่และยกเลิกรายการที่เหลือ มีวิธีการยกเลิกรายการที่เหลือโดยไม่ยกเลิกคำสั่งที่กำลังทำงานอยู่หรือไม่? ตัวอย่างเช่นสมมติว่าฉันพิมพ์บางสิ่งบางอย่างเช่น foo; bar หรือ foo && bar ซึ่งfooเป็นคำสั่งที่ใช้เวลานานซึ่งเป็นสิ่งสำคัญมากที่จะไม่ขัดจังหวะและbarทำสิ่งที่ไม่สามารถแก้ไขได้และไม่ต้องการ (พูดshutdown -h nowหรือrm -rf /) ในขณะที่fooยังทำงานอยู่มีวิธีทั่วไปในการบอกเชลล์ให้fooเสร็จ แต่จะไม่ทำงานในbarภายหลังหรือไม่? (ใช่ฉันสามารถเปลี่ยนการอนุญาตbarเพื่อไม่ให้ใช้งานได้ แต่มันไม่สะดวกbarเป็นพิเศษหากเป็นอย่างrmที่ฉันต้องการใช้ในระหว่างนี้และจะไม่ทำงานหากฉันไม่ได้เป็นเจ้าของbarหรือbarเป็นบิวอิน)

2
คู่มือการศึกษานี้ผิดเกี่ยวกับคำสั่งในการกำหนดประเภทไฟล์หรือไม่?
คู่มือการศึกษาLPIC-1 คู่มือการฝึกอบรมและการเตรียมการ (Ghori Asghar, ISBN 978-1-7750621-0-3) ประกอบด้วยคำถามต่อไปนี้ ... คำสั่งใดต่อไปนี้ที่สามารถใช้เพื่อกำหนดประเภทไฟล์ (A) file (B) type (ค) filetype (D) what ... และอ้างว่าคำตอบคือ: "(B) type" แต่ไม่ใช่fileคำตอบที่ถูกต้อง"(A) " ใช่ไหม ฉันเริ่มสงสัยทั้งเล่ม
10 linux  bash 

4
ค้นหาคำสั่งแจกแจงเอาต์พุตและอนุญาตการเลือก?
เมื่อฉันใช้findมักจะพบผลลัพธ์หลายรายการเช่น find -name pom.xml ./projectA/pom.xml ./projectB/pom.xml ./projectC/pom.xml ฉันมักจะต้องการเลือกเฉพาะผลลัพธ์ที่เฉพาะเจาะจง (เช่นedit ./projectB/pom.xml) มีวิธีในการแจกแจงfindเอาต์พุตและเลือกไฟล์ที่จะส่งผ่านไปยังแอปพลิเคชันอื่นหรือไม่? ชอบ: find <print line nums?> -name pom.xml 1 ./projectA/pom.xml 2 ./projectB/pom.xml 3 ./projectC/pom.xml !! | <get 2nd entry> | xargs myEditor ? [แก้ไข] ฉันได้ชนกับเพอร์คิวลีอาร์ดบางตัวด้วยวิธีแก้ปัญหาบางอย่างที่กล่าวถึง ดังนั้นฉันต้องการอธิบายขั้นตอนในการทำซ้ำ: git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git cd eclipse.platform.swt.git <now try looking for 'pom.xml' and 'feature.xml' files> [แก้ไข] …
10 bash  files  find 

5
ความไวตัวพิมพ์เล็กในวงกลมแบบเหลี่ยมยึด
โดยปกติทุบตีทุบตีเป็นกรณี ๆ ไป: $ echo c* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo C* CarePackage.md ChocRippleCake.md Clips การใช้วงเล็บเหลี่ยมดูเหมือนจะไม่เปลี่ยนแปลงสิ่งนี้: $ echo [c]* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo [C]* CarePackage.md ChocRippleCake.md Clips มันยังคงไม่เปลี่ยนถ้าใช้ยัติภังค์: $ echo [c-c]* casefix.pike cdless chalices.py charconv.py …
10 bash  shell  wildcards  locale 

1
“ s” ใน“ $ -” คืออะไร?
$-ปกติฉันตระหนักดีถึงเนื้อหาของ CentOS ล่าสุดที่ฉันได้รับ: [grochmal@orion ~]$ echo $- himBH hmBHเป็นตัวเลือกทั้งหมดจากsetและiหมายความว่าเปลือกของฉันเป็นแบบโต้ตอบ กระนั้นบน Arch Linux ของฉันฉันได้รับ: [grochmal@haps ~]$ echo $- himBHs ฉันไม่พบสิ่งที่มีประโยชน์man bashและset -sทำให้ฉันมีข้อผิดพลาด สิ่งนั้นหมายsถึงอะไร

4
กำหนดและตรวจสอบข้อมูลเมตาของฟังก์ชัน bash
ฉันมักจะสร้างและลงทะเบียนฟังก์ชั่นทุบตีจำนวนมากที่ทำงานหลายอย่างที่ฉันทำในโครงการพัฒนาของฉันโดยอัตโนมัติ การสร้างนั้นขึ้นอยู่กับ meta-data ของโครงการที่ฉันกำลังดำเนินการ ฉันต้องการใส่คำอธิบายประกอบฟังก์ชั่นด้วยข้อมูลของโครงการที่สร้างขึ้นด้วยวิธีนี้: func1() { # This function was generated for project: PROJECT1 echo "do my automation" } เป็นการดีที่ฉันจะสามารถเห็นความคิดเห็นเมื่อฉันตรวจสอบคำจำกัดความ: $ type func1 func1 is a function func1 () { # This function was generated for project: PROJECT1 echo "do my automation" } แต่อย่างใดทุบตีดูเหมือนว่าจะไม่สนใจความคิดเห็นในขณะโหลดฟังก์ชั่นไม่ได้เมื่อดำเนินการ ดังนั้นความคิดเห็นจะหายไปและฉันได้รับผลลัพธ์นี้: func1 is a function …
10 bash  function 

1
วิธีการเรียกใช้คำสั่งอัตโนมัติหลังจากออกจาก ssh
ฉันจะรันคำสั่งบนโลคัลเทอร์มินัลโดยอัตโนมัติหลังจากออกจากการsshเชื่อมต่อได้อย่างไร มีตะขอหรือเหตุการณ์ที่สามารถจัดการกับสิ่งนี้ได้หรือไม่?
10 bash  shell  ssh 

2
วิธีการส่งผ่านข้อโต้แย้งไปยังสคริปต์ซึ่งเป็นอินพุตเพื่อทุบตี
ตอนนี้ฉันมีซับในแบบนี้: curl -fsSL http://git.io/vvZMn | bash มันกำลังดาวน์โหลดสคริปต์และส่งต่อเพื่อทุบตีเป็นไฟล์ stdin printผมอยากจะเรียกใช้สคริปต์นี้กับอาร์กิวเมนต์เพิ่มเติม อาจจะเป็นเช่นนี้? curl -fsSL http://git.io/vvZMn | bash -- print แต่มันไม่ได้ผล
10 bash  pipe  curl  input 

4
เหตุใดการตัดจึงล้มเหลวด้วยการทุบตีและไม่ zsh
ฉันสร้างไฟล์ที่มีฟิลด์คั่นด้วยแท็บ echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input ฉันมีสคริปต์ชื่อต่อไปนี้ zsh.sh #!/usr/bin/env zsh while read line; do <<<$line cut -f 2 done < "$1" ฉันทดสอบมัน $ ./zsh.sh input bar bar มันใช้งานได้ดี อย่างไรก็ตามเมื่อฉันเปลี่ยนบรรทัดแรกเพื่อเรียกใช้bashแทนจะล้มเหลว $ ./bash.sh input foo bar baz foo bar baz ทำไมสิ่งนี้ถึงล้มเหลวbashและทำงานกับzsh? การแก้ไขปัญหาเพิ่มเติม การใช้เส้นทางตรงใน shebang แทนที่จะenvสร้างพฤติกรรมแบบเดียวกัน ไปป์กับechoแทนที่จะใช้ที่นี่สตริง<<<$lineยังสร้างลักษณะการทำงานเดียวกัน echo $line | cut -f 2กล่าวคือ ใช้awkแทนการcut …

2
สถานะการส่งคืนของการกำหนดตัวแปรกำหนดอย่างไร?
ฉันได้เห็นโครงสร้างในสคริปต์เช่นนี้ if somevar="$(somecommand 2>/dev/null)"; then ... fi เอกสารนี้อยู่ที่ไหนสักแห่ง? สถานะการส่งคืนของตัวแปรถูกกำหนดอย่างไรและเกี่ยวข้องกับการทดแทนคำสั่งอย่างไร (ตัวอย่างเช่นฉันจะได้ผลลัพธ์เดียวกันด้วยif echo "$(somecommand 2>/dev/null)"; then)

2
เป็น“ $” หรือไม่ (เครื่องหมายคำถามดอลลาร์) มีเฉพาะในเปลือก Bash เท่านั้น
ในBashเปลือกฉันสามารถรับสถานะออกจากคำสั่งผ่าน$?ตัวแปร: # ps -ef | grep "haha" root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha # echo $? 0 มีเฉพาะใน Bash shell เท่านั้นหรือไม่ หรือฉันจะใช้มันในเปลือกหอยอื่นได้หรือไม่

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