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

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

4
วัตถุประสงค์ของการระงับที่ล่าช้า (Ctrl-Y) ใน Bash คืออะไร?
ส่วนเต็มของหน้า Bash man ซึ่งมีผลบังคับใช้จะบอกว่า: หากระบบปฏิบัติการที่ใช้ bash รองรับการควบคุมงาน bash จะมีระบบอำนวยความสะดวกในการใช้งาน การพิมพ์อักขระ suspend (โดยทั่วไปคือ ^ Z, Control-Z) ในขณะที่กระบวนการกำลังทำงานอยู่ทำให้กระบวนการนั้นหยุดลงและส่งกลับการควบคุมไปยัง bash การพิมพ์อักขระหยุดทำงานล่าช้า (โดยทั่วไปคือ ^ Y, Control-Y) ทำให้กระบวนการหยุดทำงานเมื่อพยายามอ่านอินพุตจากเทอร์มินัลและการควบคุมจะถูกส่งกลับไปยังทุบตี ผู้ใช้อาจจัดการกับสถานะของงานนี้โดยใช้bg คำสั่งเพื่อดำเนินการต่อในพื้นหลังfgคำสั่งเพื่อดำเนินการต่อในเบื้องหน้าหรือคำสั่ง kill เพื่อฆ่ามัน A ^ Z มีผลบังคับใช้ทันทีและมีผลข้างเคียงเพิ่มเติมที่ทำให้การส่งออกและประเภทหัวพิมพ์ที่รอดำเนินการถูกยกเลิก ฉันไม่เคยใช้Ctrl- Y; ฉันเพิ่งเรียนรู้เกี่ยวกับมัน ฉันทำได้ดีกับCtrl- Z(ระงับ) เท่านั้น ฉันพยายามจินตนาการว่าตัวเลือกนี้มีไว้เพื่ออะไร มันจะมีประโยชน์เมื่อไหร่? (โปรดทราบว่าคุณลักษณะนี้ไม่มีอยู่ในรุ่น Unix ทั้งหมดมีอยู่ในSolarisและFreeBSDแต่ไม่ใช่ใน Linux การตั้งค่าที่สอดคล้องกันคือstty dsusp) บางทีอาจจะน้อยจิตใจ: มีอะไรที่สามารถทำได้ด้วยCtrl- Yที่ไม่สามารถทำได้อย่างง่ายดายเพียงแค่มีCtrl- Z?

3
ดูประวัติทุบตีที่หลากหลาย
historyรายการคำสั่งออกทั้งหมดประวัติศาสตร์สำหรับเซสชันปัจจุบัน ชอบ: 1 ls 2 cd /root 3 mkdir something 4 cd something 5 touch afile 6 ls 7 cd .. 8 rm something/afile 9 cd .. 10 ls 11 history เพื่อที่จะค้นหารายการที่น่าสนใจฉันสามารถท่อhistoryด้วยgrepเช่น history | grep ls 1 ls 6 ls 10 ls ฉันยังสามารถดู 3 คำสั่งสุดท้ายเช่น: history 3 11 history 12 …

3
Grep หลากสี
ฉันพยายามเรียกคำสั่ง grep แต่ละคำเพื่อเน้นว่าผลลัพธ์เป็นสีที่ต่างกัน ฉันสามารถทำได้ด้วยตนเองโดยใช้บรรทัดดังนี้: ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f cตัวละครทุกตัวจะถูกเน้นด้วยสีเขียวและoตัวละครทุกตัวจะถูกเน้นด้วยสีแดง ฯลฯ ... เพื่อให้ตัวอย่างนี้ทำงานคุณจะต้องแน่ใจว่าคุณมี --color=alwaysคำสั่ง grep อยู่เสมอ ฉันได้ตั้งค่านี้ใน.bashrc grep ของฉันดังนั้นจะมีสี: export GREP_OPTIONS='--color=always' สิ่งที่ฉันพยายามทำให้สำเร็จคือห่อฟังก์ชันนี้ด้วยนามแฝงเพื่อให้ฉันสามารถโทรได้ grepและมีGREP_COLORSค่าที่แตกต่างกันในแต่ละครั้ง ฉันเข้าใจการพิจารณาของเชลล์จำนวนมากสำหรับ grep piped ใหม่แต่ละอันและฉันพยายามทำสิ่งนี้โดยการสร้างไฟล์บางไฟล์ (หนึ่งสำหรับแต่ละสี) เพื่อระบุว่าพวกมันถูกใช้ไปแล้ว ฉันได้พยายามมาบ้างแล้ว แต่ก็แปลกแล้วอันนี้ดูเหมือนจะทำงานได้ดีที่สุด ฉันมีสิ่งนี้ในของฉัน.bashrc : alias mg="mygrep" mygrep(){ # define …
30 bash  shell  grep  pipe  bashrc 

8
วิธีการสร้างจำนวนเต็มสุ่มขนาดใหญ่กระจายอย่างสม่ำเสมอในทุบตี?
ฉันสงสัยว่าสิ่งใดจะเป็นวิธีที่ดีที่สุดที่จะได้แบบแผนที่ดีในการทุบตีนั่นคือขั้นตอนในการรับจำนวนเต็มบวกแบบสุ่มระหว่างMINและMAXเช่นนั้น ช่วงสามารถมีขนาดใหญ่โดยพลการ (หรืออย่างน้อยพูดได้สูงสุด 2 32 -1) มีการกระจายค่าอย่างสม่ำเสมอ (เช่นไม่มีอคติ) มันมีประสิทธิภาพ วิธีที่มีประสิทธิภาพในการรับการสุ่มใน bash คือการใช้$RANDOMตัวแปร อย่างไรก็ตามนี่เป็นเพียงตัวอย่างค่าระหว่าง 0 ถึง 2 15 -1 ซึ่งอาจไม่ใหญ่พอสำหรับวัตถุประสงค์ทั้งหมด โดยทั่วไปผู้คนจะใช้โมดูโล่เพื่อให้อยู่ในช่วงที่พวกเขาต้องการเช่น MIN=0 MAX=12345 rnd=$(( $RANDOM % ($MAX + 1 - $MIN) + $MIN )) นอกจากนี้จะสร้างอคตินอกจากจะ$MAXเกิดขึ้นกับหาร 2 15 -1 = 32767 เช่นถ้า$MINเป็น 0 และ$MAX9 แล้วค่า 0 ถึง 7 เล็กน้อยน่าจะมากกว่าค่าที่ 8 และ 9 …

5
วิธีรับมิลลิวินาทีตั้งแต่ Unix ยุค
ฉันต้องการสคริปต์ทุบตีที่วัดเวลาเปิดตัวของเบราว์เซอร์สำหรับที่ฉันใช้ html ซึ่งได้รับการประทับเวลาโหลดเป็นมิลลิวินาทีโดยใช้ JavaScript ในเชลล์สคริปต์ก่อนที่ฉันจะเรียกเบราว์เซอร์ฉันได้รับการประทับเวลาด้วย: date +%s ปัญหาคือว่ามันได้รับการประทับเวลาในไม่กี่วินาทีและฉันต้องการมันเป็นมิลลิวินาทีเพราะบางครั้งเมื่อวิ่งครั้งที่สองเบราว์เซอร์เริ่มในไม่กี่วินาทีและฉันต้องสามารถวัดเวลาได้อย่างแม่นยำโดยใช้มิลลิวินาทีแทนวินาที ฉันจะรับการประทับเวลาเป็นมิลลิวินาทีจากสคริปต์ทุบตีได้อย่างไร
30 bash  timestamps 


2
การเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ใช้การล็อกไฟล์หรือไม่?
ถ้าฉันมีคำสั่ง $ ./script >> file.log ที่ถูกเรียกสองครั้งเมื่อมีสายที่สองเกิดขึ้นก่อนที่สายแรกจะจบลงจะเกิดอะไรขึ้น การโทรครั้งแรกจะได้รับการล็อคแบบเอกสิทธิ์เฉพาะบุคคลในไฟล์เอาต์พุตหรือไม่? หากเป็นเช่นนั้นสคริปต์ที่สองจะล้มเหลวเมื่อพยายามเขียนหรือเชลล์ยอมรับเอาต์พุต (อนุญาตให้สคริปต์จบ) และส่งข้อผิดพลาดหรือไม่? หรือไฟล์บันทึกถูกเขียนถึงสองครั้งหรือไม่?

6
เปลี่ยนรูปร่างเคอร์เซอร์ (หรือสี) เพื่อระบุโหมด vi ใน bash
ชี้แจง:ผมไม่ได้ถามถึงวิธีการเปลี่ยนเคอร์เซอร์เมื่อใช้เป็นกลุ่มที่อยู่ในขั้ว ฉันต้องการให้เคอร์เซอร์เปลี่ยนเมื่อสลับระหว่างโหมดอินพุตและคำสั่งภายในโหมด Vi ของ Bash: set -o vi <CR> type some text <ESC> (the cursor changes shape/color) i (cursor change back) etc... ฉันพบสคริปต์ที่ทำให้การเปลี่ยนสีของเคอร์เซอร์ในโหมดการเปลี่ยนแปลงเป็นไปได้ในzshแต่ฉันไม่ต้องการเปลี่ยนเชลล์สำหรับคุณลักษณะนี้เพียงอย่างเดียว มีวิธีที่จะให้เคอร์เซอร์เปลี่ยนรูปร่างเช่นใน gvim (หรือเพียงแค่สี) เมื่อสลับระหว่างโหมดคำสั่งและโหมดแทรกในบรรทัดคำสั่ง Bash หรือไม่?
30 bash  vi  line-editor 

5
แหล่งข้อมูลที่ดีที่สุดในการเรียนรู้สคริปต์ทุบตี? [ปิด]
ฉันได้ตั้งโปรแกรมในหลายภาษาเป็นเวลาสองปีแล้วฉันหมายความว่าฉันรู้วิธีออกแบบและใช้งานโซลูชันที่เหมาะสมสำหรับปัญหาที่กำหนด อย่างไรก็ตามการทุบตีทำให้ฉันปวดหัวอย่างมากไม่มีอะไรที่ทำได้ตามที่คาดไว้หรือแม้แต่ไม่มีข้อผิดพลาด คำแนะนำทั้งหมดที่ฉันพบนั้นไม่เป็นทางการอย่างไม่น่าเชื่อสรุปไวยากรณ์ของมันไม่ถูกต้องหรือบอกข้อผิดพลาดทั่วไปที่คุณสามารถทำได้ ดังนั้นคุณสามารถแนะนำฉันได้อย่างไร
30 bash  reference 

4
วิธีเปลี่ยนเส้นทาง stderr และ stdout ไปยังไฟล์ต่าง ๆ และแสดงใน terminal ได้อย่างไร?
ฉันต้องการเห็นผลลัพธ์ของคำสั่งในเทอร์มินัลราวกับว่าไม่มีการเปลี่ยนเส้นทาง นอกจากนี้ stderr จะต้องถูกเปลี่ยนเส้นทางไปยัง err.log และ stdout จะต้องถูกเปลี่ยนเส้นทางไปยัง stdout.log มันจะดีถ้ามีสำเนาที่ถูกต้องของสิ่งที่ปรากฏใน terminal เช่นข้อผิดพลาดที่พิมพ์เป็นและเมื่อมันเกิดขึ้นในไฟล์แยกต่างหาก: stdouterr.log

4
การอ้างถึง ssh $ host $ FOO และ ssh $ host“ sudo su user -c $ FOO”
ฉันมักจะจบลงด้วยการออกคำสั่งที่ซับซ้อนมากกว่า ssh; คำสั่งเหล่านี้เกี่ยวข้องกับ piping to awk หรือ perl one-line และด้วยเหตุนี้จึงมีการเสนอราคาเดียวและ $ 's ฉันไม่สามารถคิดออกกฎอย่างหนักและรวดเร็วในการอ้างอิงได้อย่างถูกต้องและไม่พบการอ้างอิงที่ดีสำหรับมัน ตัวอย่างเช่นพิจารณาสิ่งต่อไปนี้: # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (สังเกตเครื่องหมายอัญประกาศพิเศษในคำสั่ง awk) …
30 bash  shell  ssh  quoting 

2
อธิบายคำสั่งเชลล์: shift $ (($ optind - 1))
ฉันไม่ได้เป็นผู้ชาย Linux แต่ติดอยู่ในสคริปต์บางอย่างที่ฉันต้องอ่านสำหรับโครงการของฉัน ดังนั้นทุกคนสามารถช่วยฉันในสิ่งที่คำสั่งนี้กำลังทำอะไรอยู่? shift $(($optind - 1))

3
ถ้าฉัน sudo เรียกใช้ไฟล์สคริปต์ Bash คำสั่งทั้งหมดภายในสคริปต์ Bash จะถูกเรียกใช้งานเป็น sudo ด้วยหรือไม่
ฉันต้องการเขียนสคริปต์หลังการติดตั้งอัตโนมัติใน Bash ( post-install.shเช่นชื่อ) สคริปต์จะเพิ่มและอัปเดตที่เก็บติดตั้งและอัพเดทแพ็คเกจโดยอัตโนมัติแก้ไขไฟล์กำหนดค่า ฯลฯ ตอนนี้ถ้าฉันรันสคริปต์นี้เช่นsudo post-install.shฉันจะได้รับแจ้งให้ป้อนsudoรหัสผ่านครั้งเดียวเท่านั้นหรือฉันจะต้องป้อนsudoรหัสผ่านในแต่ละการเรียกใช้คำสั่งภายในสคริปต์ซึ่งต้องsudoได้รับอนุญาตหรือไม่ กล่าวอีกนัยหนึ่งคำสั่งภายในสคริปต์ทุบตี 'สืบทอด' สิทธิ์การดำเนินการดังนั้นจะพูดหรือไม่ และถ้าพวกเขาทำจริง ๆแล้วยังมีความเป็นไปได้ไหมที่sudoสิทธิ์จะหมดเวลา (ตัวอย่างเช่นคำสั่งเฉพาะใช้เวลานานพอที่จะsudoหมดเวลา) หรือการป้อนsudoรหัสผ่านครั้งแรกจะมีอายุการใช้งานตลอดช่วงเวลาของสคริปต์ทั้งหมดหรือไม่

6
การทดแทนคำสั่ง: การแยกบรรทัดใหม่ แต่ไม่ใช่ที่ว่าง
ฉันรู้ว่าฉันสามารถแก้ปัญหานี้ได้หลายวิธี แต่ฉันสงสัยว่ามีวิธีที่จะทำโดยใช้เพียง bash ในตัวและถ้าไม่วิธีที่มีประสิทธิภาพที่สุดในการทำคืออะไร ฉันมีไฟล์ที่มีเนื้อหาเช่น AAA B C DDD FOO BAR โดยที่ฉันหมายความว่ามันมีหลายบรรทัดเท่านั้นและแต่ละบรรทัดอาจมีหรือไม่มีช่องว่างก็ได้ ฉันต้องการเรียกใช้คำสั่งเช่น cmd AAA "B C DDD" "FOO BAR" ถ้าฉันใช้cmd $(< file)ฉันจะได้รับ cmd AAA B C DDD FOO BAR และถ้าฉันใช้cmd "$(< file)"ฉันจะได้รับ cmd "AAA B C DDD FOO BAR" ฉันจะให้แต่ละบรรทัดปฏิบัติกับพารามิเตอร์หนึ่งตัวได้อย่างไร

6
Trap, ERR และ echoing บรรทัดข้อผิดพลาด
ฉันกำลังพยายามสร้างการรายงานข้อผิดพลาดโดยใช้ Trap เพื่อเรียกใช้ฟังก์ชันกับข้อผิดพลาดทั้งหมด: Trap "_func" ERR เป็นไปได้ไหมที่จะรับสัญญาณ ERR ที่เป็นเส้นตรง? เปลือกเป็นทุบตี หากฉันทำเช่นนั้นฉันสามารถอ่านและรายงานคำสั่งที่ใช้และบันทึก / ดำเนินการบางอย่าง หรือบางทีฉันอาจจะทำผิดทั้งหมดนี้? ฉันทดสอบกับสิ่งต่อไปนี้: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" และ$LINENOกำลังกลับมา 2 ไม่ทำงาน

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