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

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

6
ฉันจะอ่านทีละบรรทัดจากตัวแปรใน bash ได้อย่างไร
ฉันมีตัวแปรที่มีเอาต์พุตหลายบรรทัดของคำสั่ง วิธีที่มีประสิทธิภาพมากที่สุดในการอ่านบรรทัดเอาต์พุตโดยบรรทัดจากตัวแปรคืออะไร ตัวอย่างเช่น: jobs="$(jobs)" if [ "$jobs" ]; then # read lines from $jobs fi
48 bash  shell  io  cat 

10
จะทดสอบได้อย่างไรว่าไฟล์ใช้ CRLF หรือ LF โดยไม่ต้องดัดแปลงไฟล์?
ฉันต้องเรียกใช้คำสั่งเป็นระยะเพื่อให้แน่ใจว่าไฟล์ข้อความบางไฟล์ถูกเก็บไว้ในโหมด Linux น่าเสียดายที่dos2unixมักจะแก้ไขไฟล์ซึ่งจะทำให้ไฟล์และไฟล์บันทึกเวลาของไฟล์เลอะและทำให้เกิดการเขียนที่ไม่จำเป็น สคริปต์ที่ฉันเขียนนั้นอยู่ใน Bash ดังนั้นฉันต้องการคำตอบจาก Bash

3
CLICOLOR และ LS_COLORS ในทุบตี
ฉันมีการตั้งค่าต่อไปนี้ใน. bashrc สำหรับระบายสีรายชื่อ ส่งออก CLICOLOR = 1 ส่งออก LS_COLORS = 'no = 00: fi = 00: di = 00; 34: ln = 01; 36: pi = 40; 33: so = 01; 35: do = 01; 35: bd = 40; 33; 01: cd = 40; 33; 01: หรือ = 40; 31; …

2
ระงับข้อความ stderr ในสคริปต์ทุบตี
พิจารณาชื่อสคริปต์ต่อไปนี้ (โง่เล็กน้อย) 'test1.sh': #/bin/bash # sleep 10 & echo sleep pid = $! pkill sleep เมื่อฉันเรียกใช้ฉันไม่เพียง แต่เอาท์พุทของเสียงก้องเท่านั้น แต่ยังรายงานการตายของการนอนหลับบน stderr ด้วย: $ ./test1.sh sleep pid = 3551 ./test1.sh: line 5: 3551 Terminated sleep 10 ในกรณีนี้ฉันต้องการระงับการพิมพ์ไปยัง stderr ฉันรู้ว่าฉันสามารถทำได้ในบรรทัดคำสั่งเช่นเดียวกับใน: $ ./test1.sh 2> /dev/null ... แต่มีวิธีที่จะระงับมันจากภายในสคริปต์หรือไม่ (ฉันรู้ว่าฉันสามารถตัดมันในสคริปต์ที่สองและให้ wrapper เปลี่ยนเส้นทาง แต่ต้องมีบางสิ่งที่ง่ายกว่า ... )

5
ตั้งใจใช้ ctrl + T ในทุบตี?
ฉันสังเกตว่าทุบตีมีการตัดสั้น ๆ สำหรับctrl+ Tซึ่งสลับอักขระสองตัวสุดท้ายก่อนเคอร์เซอร์ ฉันสงสัยว่าเพราะเหตุใดวิศวกรจึงตัดสินใจรวมสิ่งนี้ มันสืบทอดมาจากการประชุมครั้งก่อนหรือไม่? หรือมีวัตถุประสงค์ในทางปฏิบัติที่ใช้กันทั่วไปสำหรับ?

4
ทุบตีแตกต่างระหว่างการขยายรั้งและการจัดกลุ่มคำสั่งได้อย่างไร
ฉันสังเกตเห็นว่า{สามารถใช้ในการขยายรั้ง: echo {1..8} หรือในการจัดกลุ่มคำสั่ง: {ls;echo hi} ทุบตีรู้ความแตกต่างได้อย่างไร?


3
Bash: double เท่ากับ vs -eq
ฉันทำการเปรียบเทียบจำนวนเต็มในทุบตี (พยายามดูว่าผู้ใช้ทำงานเป็น root) และฉันพบสองวิธีแตกต่างกัน: สองเท่ากับ if [ $UID == 0 ] then fi -eq if [ $UID -eq 0 ] then fi ผมเข้าใจว่าไม่มี> = หรือ <= ในทุบตีเพียง -GE และเลอจึงเป็นเหตุผลว่าทำไมมี==ถ้ามี-eq? มีความแตกต่างในวิธีการเปรียบเทียบทั้งสองด้านหรือไม่?
47 bash  shell  arithmetic 

7
วิธีคืนค่าของตัวเลือกเชลล์เช่น `set -x`?
ฉันต้องการที่จะset -xจุดเริ่มต้นของสคริปต์ของฉันและ "ยกเลิก" มัน (กลับไปยังรัฐก่อนที่ผมตั้งไว้) +xหลังจากนั้นแทนสุ่มสี่สุ่มห้าการตั้งค่า เป็นไปได้ไหม PS: ฉันตรวจสอบแล้วที่นี่ ; ที่ดูเหมือนจะไม่ตอบคำถามเท่าที่ฉันจะบอกได้
47 bash  shell 

5
ให้เอาต์พุต grep เป็น rm
ฉันพยายามที่จะgrepส่งออกท่อไปrmแต่มันก็ส่งผลสิ่งที่ไร้ประโยชน์ จำเป็นต้องมีสวิตช์rmหรือไม่ หรือสามารถrmให้ regexp โดยตรงได้หรือไม่ ls | grep '^\[Daruchini'| rm rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม
47 bash  grep  rm 


7
ฉันจะทำให้สคริปต์ทุบตีแข็งขึ้นเพื่อป้องกันอันตรายเมื่อมีการเปลี่ยนแปลงในอนาคตได้อย่างไร
ดังนั้นฉันจึงลบโฟลเดอร์บ้านของฉัน (หรืออย่างแม่นยำยิ่งขึ้นไฟล์ทั้งหมดที่ฉันมีสิทธิ์เข้าถึงเพื่อเขียน) สิ่งที่เกิดขึ้นคือฉันมี build="build" ... rm -rf "${build}/"* ... <do other things with $build> ในสคริปต์ทุบตีและหลังจากต้องไม่$buildเอาการประกาศและการใช้งานได้ทั้งหมด - rmแต่ rm -rf /*ทุบตีอย่างมีความสุขที่จะขยาย ใช่. ฉันรู้สึกงี่เง่าติดตั้งข้อมูลสำรองทำให้งานที่ฉันทำหายไป พยายามที่จะย้ายผ่านความอับอาย ตอนนี้ฉันสงสัยว่าอะไรคือเทคนิคในการเขียนสคริปต์ทุบตีเพื่อให้ข้อผิดพลาดดังกล่าวไม่สามารถเกิดขึ้นได้หรืออย่างน้อยก็มีโอกาสน้อย? ตัวอย่างเช่นถ้าฉันเขียน FileUtils.rm_rf("#{build}/*") ในสคริปต์ Ruby ผู้แปลก็จะบ่นbuildว่าไม่ได้ถูกประกาศดังนั้นภาษาก็ช่วยปกป้องฉัน สิ่งที่ฉันได้พิจารณาในการทุบตีนอกเหนือจากการจับกลุ่มrm(ซึ่งเป็นคำตอบมากมายในคำถามที่เกี่ยวข้องพูดถึงไม่ได้เป็น unproblematic): rm -rf "./${build}/"* นั่นคงจะฆ่างานปัจจุบันของฉัน (repo Git) แต่ไม่มีอะไรอื่น ตัวแปร / การกำหนดพารามิเตอร์ของrmนั้นต้องมีการโต้ตอบเมื่อทำหน้าที่ภายนอกไดเรกทอรีปัจจุบัน (ไม่พบสิ่งใด) ลักษณะพิเศษที่คล้ายกัน มันเป็นหรือมีวิธีอื่นในการเขียนสคริปต์ทุบตีที่ "แข็งแกร่ง" ในแง่นี้หรือไม่?
46 bash  shell-script  rm 

13
วิธีบรรทัดคำสั่งอย่างรวดเร็วเพื่อสลับระหว่างหลายไดเรกทอรีสำหรับการบริหารระบบคืออะไร?
วิธีบรรทัดคำสั่งอย่างรวดเร็วเพื่อสลับระหว่างหลายไดเรกทอรีสำหรับการบริหารระบบคืออะไร? ฉันหมายถึงฉันสามารถใช้pushd .และpopdสลับได้ แต่ถ้าฉันต้องการเก็บทวีคูณและวนรอบพวกมันแทนที่จะโผล่มันออกอย่างถาวรที่ด้านล่างของสแต็ก

12
ทำให้ cd เป็น ls โดยอัตโนมัติ
ฉันพบว่าฉันมักจะทำต่อไปนี้: %> cd bla/bla %> ls ฉันจะชอบมันที่ว่าเมื่อใดก็ตามที่ฉันในไดเรกทอรีที่มันไม่โดยอัตโนมัติcdls ฉันเล่นซอกับฉันซัก.bashrcพัก แต่ก็ไม่สามารถหาวิธีที่จะทำให้มันเกิดขึ้นได้

2
ทำไม ZSH ถึงลงท้ายด้วยเครื่องหมายเปอร์เซนต์ไฮไลต์?
ฉันพบสิ่งนี้ในบางโอกาสด้วยแอพพลิเคชั่นที่หลากหลาย ฉันมักจะคิดว่าเป็นเพราะผลผลิตถูกยกเลิกก่อน (ctrl + c เป็นต้น) หรือสิ่งที่คล้ายกันและ zsh เติมอักขระบรรทัดใหม่ แต่ตอนนี้ความอยากรู้อยากเห็นได้รับสิ่งที่ดีที่สุดของฉันเพราะมันดูเหมือนจะไม่ทำอย่างนี้ zsh ทุบตี Sequenceโปรแกรมเป็นสิ่งที่ฉันดึงออกมาจากหนังสือในขณะอ่านบน Java การรับรองและเพียงแค่ต้องการที่จะดูว่ามันจะรวบรวมและวิ่ง ฉันสังเกตเห็นว่ามันไม่ได้ใช้println()วิธีการจากSystem.outแพ็คเกจ / คลาส print()แต่มันใช้เก่าธรรมดา การขาดอักขระขึ้นบรรทัดใหม่เป็นเหตุผลที่ทำให้ฉันได้รับสัญลักษณ์นี้หรือไม่?
46 bash  zsh  prompt  newlines 

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