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

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

4
ฉันจะเปลี่ยน bash prompt เพื่อแสดงไดเร็กตอรี่ทำงานได้อย่างไร?
ฉันสามารถพิมพ์ dir ที่ทำงานในปัจจุบันของฉันเช่นนี้ myPrompt$ pwd /Users/me/myDir ฉันต้องการเปลือกของฉันเป็นแบบนี้ /Users/me/myDir$ pwd /Users/me/myDir เป็นไปได้ไหม ฉันจะทำมันได้อย่างไร
33 bash  osx  prompt 

2
วิธีการรับเอาท์พุทภายใน "screen" ออกไปยังสคริปต์
ฉันมีscreenอินสแตนซ์กำลังทำงานอยู่และฉันจะต้องเรียกใช้รหัสบางอย่างภายในscreenและรับผลลัพธ์จากสคริปต์ของฉัน screen -S session_name -X eval 'stuff "$cmd"\015'ส่วนแรกเป็นเรื่องง่ายมากผมก็ (ฉันแก้ไขบรรทัดที่พบในสคริปต์ ) ส่วนที่สองออกไปทางเอาท์พุทยากกว่า ฉันจะได้รับผลงานทั้งหมดได้ขนาดเท่าไหร่

2
ทำไม `sort <(ls -l)` ทำงาน แต่ `sort <(ls -l)` ล้มเหลว?
วันนี้ผมกำลังเรียนรู้อะไรบางอย่างเกี่ยวกับ FIFO บทความนี้: รู้เบื้องต้นเกี่ยวกับไปป์cat &lt;(ls -l)ซึ่งกล่าวถึง ฉันทำการทดลองโดยใช้sort &lt; (ls -l)ซึ่งข้อผิดพลาดปรากฏขึ้น: -bash: syntax error near unexpected token `('` จากนั้นฉันก็พบว่าฉันมีช่องว่างเพิ่มเติมในคำสั่งผิด แต่ทำไมคำสั่งพิเศษนี้จะนำไปสู่ความล้มเหลวนี้ ทำไมสัญลักษณ์การเปลี่ยนเส้นทางจะต้องใกล้เคียงกับ(?

1
ESC + {: มันคืออะไรและที่ฉันสามารถรู้เพิ่มเติมเกี่ยวกับมันได้หรือไม่
ฉันเล่นรอบ ๆ ที่พร้อมต์ bash และกด ESC ตามด้วย {, หลังจากนั้นเชลล์แสดงไฟล์ทั้งหมดให้เสร็จในสตริง fileglob เช่น: หากฉันพิมพ์bash Cตามด้วยESC+{เชลล์จะแสดงสิ่งนี้: bash CHECK{,1,2{,23{336{,66666},6},3{,6}}}เติมไฟล์และไดเรกทอรีที่เป็นไปได้ทั้งหมดที่เริ่มต้นด้วย C โดยอัตโนมัติโดยแสดงไฟล์ทดลองและไดเรกทอรีทั้งหมดที่ฉันทำ คืออะไรESC + {และที่ฉันสามารถทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้? ฉันเห็นสิ่งนี้ใน CENTOS &amp; Mac OSX พร้อมทุบตี

1
ฉันจะใช้ null bytes ใน Bash ได้อย่างไร
ฉันได้อ่านมาแล้วเนื่องจากเส้นทางของไฟล์ใน Bash สามารถมีตัวละครใด ๆ ยกเว้น null null (ไบต์ที่มีค่าเป็นศูนย์$'\0') จึงเป็นการดีที่สุดที่จะใช้ null null เป็นตัวคั่น ตัวอย่างเช่นหากผลลัพธ์ของfindจะถูกส่งไปยังโปรแกรมอื่นขอแนะนำให้ใช้-print0ตัวเลือก (สำหรับเวอร์ชันfindที่มี) แต่ถึงแม้ว่าบางอย่างเช่นนี้จะทำงานได้ดี (การพิมพ์เส้นทางไฟล์คั่นด้วยบรรทัดใหม่ - ไม่ต้องกังวลนี่เป็นเพียงการสาธิตฉันไม่ได้ทำในสคริปต์จริง): find -print0 \ | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done สิ่งนี้ไม่ได้ผล: for file in * ; do echo -n "$file"$'\0' ; done \ | while IFS= …
32 bash  null 

5
แสดงรายการไฟล์ที่เรียงตามจำนวนบรรทัดที่มี
ฉันจะแสดงรายการจำนวนบรรทัดในไฟล์/group/book/four/wordเรียงลำดับตามจำนวนบรรทัดที่มีได้อย่างไร ls -l คำสั่งรายการพวกเขาลง แต่ไม่ได้จัดเรียงพวกเขา
32 bash  shell  files  wc 

3
หมายความว่าอะไร $!
ฉันกำลังติดตามผ่านบทช่วยสอนและกล่าวถึงการเรียกใช้คำสั่งนี้: sudo chmod 700 !$ !$ฉันไม่คุ้นเคยกับ มันหมายความว่าอะไร?

6
นับจำนวนบรรทัดของเอาต์พุตจากโปรแกรมก่อนหน้า
ฉันพยายามนับจำนวนบรรทัดผลลัพธ์ที่โปรแกรมหนึ่งสร้าง ปัญหาคือโปรแกรมใช้เวลานานในการรันและฉันต้องการที่จะแสดงผลลัพธ์ให้กับผู้ใช้ มีวิธีนับจำนวนบรรทัดคำสั่งสุดท้ายที่เอาต์พุตหรือไม่? ฉันสามารถทำได้program | wc -lแต่นั่นจะไม่แสดงผลลัพธ์ให้กับผู้ใช้ เท่าที่ฉันรู้ฉันต้องทำprogram; program | wc -l- แต่โปรแกรมใช้เวลาอย่างน้อยหนึ่งนาทีในการทำงานดังนั้นฉันไม่ต้องการทำมากกว่าหนึ่งครั้งเพื่อแสดงการนับบรรทัดที่ด้านล่าง แก้ไข: มีวิธีการแสดงผลตามที่เกิดขึ้น (ทีละบรรทัด) แล้วส่งกลับนับในตอนท้าย?

4
find -exec + vs find | xargs: อันไหนให้เลือก?
ผมเข้าใจว่า-execสามารถใช้ตัวเลือกในการเลียนแบบพฤติกรรมของ+ xargsมีสถานการณ์ใดบ้างที่คุณต้องการให้ฟอร์มหนึ่งเหนืออีกฟอร์มหนึ่ง? ฉันมักจะชอบแบบฟอร์มแรกถ้าเพียงเพื่อหลีกเลี่ยงการใช้ท่อ ฉันคิดว่านักพัฒนาของfindต้องทำการเพิ่มประสิทธิภาพที่เหมาะสม ฉันถูกไหม?
32 bash  find  pipe  xargs 

2
การเปลี่ยนเส้นทาง“ <<(…)” หมายถึงอะไร
ฉันเห็นว่า rvm (ตัวจัดการเวอร์ชัน ruby) ติดตั้งโดยใช้คำสั่งต่อไปนี้: bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) ดังนั้นฉันเข้าใจว่าเราได้รับเนื้อหาของสคริปต์และส่งต่อไปยัง bash (ฉันเชื่อ&lt; &lt;และ&lt;&lt;เป็นสิ่งเดียวกันหรือไม่) ฉันสนใจใน&lt; &lt;ส่วนนี้พบคำอธิบายต่อไปนี้บนเน็ต: &lt;&lt; โทเค็นหมายถึงใช้กระแสอินพุตปัจจุบันเป็น STDIN สำหรับโปรแกรมจนกว่าจะเห็นโทเค็น เรื่องนี้ไม่ชัดเจนสำหรับฉันใครบางคนสามารถเป็นตัวอย่างหรืออธิบายในวิธีที่ง่ายขึ้น?

3
ฉันจะใช้คำสั่ง bash สองคำสั่งใน -exec ของคำสั่ง find ได้อย่างไร
เป็นไปได้หรือไม่ที่จะใช้ 2 คำสั่งใน-execส่วนของfindคำสั่ง? ฉันลองทำสิ่งที่ชอบแล้ว: find . -name "*" -exec chgrp -v new_group {} ; chmod -v 770 {} \; และฉันได้รับ: ค้นหา: อาร์กิวเมนต์ที่หายไปไปยัง -exec chmod: ไม่สามารถเข้าถึง {}: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว chmod: ไม่สามารถเข้าถึงได้: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
32 bash  find 

1
ตัวอธิบายไฟล์ & เชลล์สคริปต์
ฉันมีเวลายากมากที่จะเข้าใจว่าคน ๆ หนึ่งใช้ file descriptor ใน shell script ได้อย่างไร ฉันรู้พื้นฐานเช่น exec 5 &gt; /tmp/foo ดังนั้น fd 5 จะแนบกับ foo เพื่อเขียน exec 6 &lt; /tmp/bar …สำหรับการอ่าน exec 5&gt;&amp;- …ปิด fd ตอนนี้จะทำอะไร? #!/bin/bash exec 5 &gt; /tmp/foo exec 6 &lt; /tmp/bar cat &lt;&amp;6 | while read a do echo $a &gt;&amp;5 done …

2
ลบรูปแบบไฟล์ที่ตรงกัน
ฉันจำเป็นต้องลบไฟล์ทั้งหมดซ้ำในโฟลเดอร์ย่อยทั้งหมดที่ชื่อไฟล์มีหมายเลขตามด้วย 'x' ตามด้วยหมายเลขอย่างน้อยสองครั้ง ตัวอย่าง: ฉันต้องการลบไฟล์เหล่านี้: 'aaa-12x123-123x12.jpg' 'aaa-12x12-123x12-12x123.jpg' แต่ฉันไม่ต้องการลบไฟล์เหล่านี้: 'aaa.jpg' 'aaa-12x12.jpg' 'aaaxaaa-123x123.jpg' 'aaaxaaa-aaaxaaa.jpg' ฉันจะทำสิ่งนั้นได้อย่างไร (จาก bash shell)
32 bash  files  find  wildcards 

5
getopt, getopts หรือการแยกวิเคราะห์แบบแมนนวล - จะต้องใช้อะไรเมื่อฉันต้องการสนับสนุนตัวเลือกทั้งระยะสั้นและระยะยาว
ขณะนี้ฉันกำลังเขียนสคริปต์ Bash ซึ่งมีข้อกำหนดดังต่อไปนี้: ควรรันบนแพลตฟอร์ม Unix / Linux ที่หลากหลาย ควรสนับสนุนตัวเลือกทั้งแบบสั้นและยาว (GNU) ฉันรู้ว่าgetoptsจะเป็นวิธีที่ต้องการในแง่ของการพกพา แต่ AFAIK มันไม่สนับสนุนตัวเลือกยาว getoptรองรับตัวเลือกยาว แต่BashGuideแนะนำอย่างยิ่งกับมัน: ห้ามใช้ getopt (1) getopt ไม่สามารถจัดการกับสตริงอาร์กิวเมนต์ว่างเปล่าหรือขัดแย้งกับช่องว่างที่ฝังตัว โปรดลืมว่ามันมีอยู่จริง ดังนั้นยังคงมีตัวเลือกในการแยกวิเคราะห์ด้วยตนเอง นี่เป็นข้อผิดพลาดง่ายสร้างรหัสสำเร็จรูปค่อนข้างมากและฉันต้องจัดการข้อผิดพลาดด้วยตัวเอง (ฉันเดาว่าgetopt(s)จัดการข้อผิดพลาดด้วยตัวเอง) ดังนั้นสิ่งที่จะเป็นตัวเลือกที่ต้องการในกรณีนี้


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