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

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


6
ความมหัศจรรย์ของ“ -” (เส้นประ) ในพารามิเตอร์บรรทัดคำสั่งคืออะไร?
ตัวอย่าง: สร้างอิมเมจ ISO และเบิร์นลงซีดีโดยตรง mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw - เปลี่ยนเป็นไดเร็กทอรีก่อนหน้า cd - ฟังบนพอร์ต 12345 และส่งข้อมูลที่ไม่ตรงไปยังมัน nc -l -p 12345 | tar xvzf - จุดประสงค์ของเส้นประคืออะไรและฉันจะใช้มันได้อย่างไร?
102 linux  bash  shell  unix  command-line 

7
จะลบและแทนที่บรรทัดสุดท้ายในเทอร์มินัลโดยใช้ bash ได้อย่างไร?
ฉันต้องการใช้แถบความคืบหน้าซึ่งแสดงวินาทีที่ผ่านไปใน bash สำหรับสิ่งนี้ฉันจำเป็นต้องลบบรรทัดสุดท้ายที่แสดงบนหน้าจอ (คำสั่ง "clear" จะลบหน้าจอทั้งหมด แต่ฉันต้องการลบเฉพาะบรรทัดของแถบความคืบหน้าและแทนที่ด้วยข้อมูลใหม่) ผลลัพธ์สุดท้ายควรมีลักษณะดังนี้: $ Elapsed time 5 seconds หลังจากนั้น 10 วินาทีฉันต้องการแทนที่ประโยคนี้ (ในตำแหน่งเดียวกันในหน้าจอ) โดย: $ Elapsed time 15 seconds
102 bash  replace  terminal  line 

2
วิธีใช้คำสั่งเชลล์ใน Makefile
ฉันพยายามใช้ผลลัพธ์ของlsคำสั่งอื่น ๆ (เช่น echo, rsync): all: <Building, creating some .tgz files - removed for clarity> FILES = $(shell ls) echo $(FILES) แต่ฉันได้รับ: make FILES = Makefile file1.tgz file2.tgz file3.tgz make: FILES: No such file or directory make: *** [all] Error 1 ฉันได้พยายามใช้echo $$FILES, echo ${FILES}และecho $(FILES)มีโชคไม่
102 bash  makefile  echo 

19
ข้อผิดพลาดทางไวยากรณ์ Bash: จุดสิ้นสุดของไฟล์โดยไม่คาดคิด
ยกโทษให้ฉันด้วยนี่เป็นสคริปต์ที่เรียบง่ายมากใน Bash นี่คือรหัส: #!/bin/bash # june 2011 if [ $# -lt 3 -o $# -gt 3 ]; then echo "Error... Usage: $0 host database username" exit 0 fi หลังจากเรียกใช้ sh file.sh: ข้อผิดพลาดทางไวยากรณ์: จุดสิ้นสุดของไฟล์ที่ไม่คาดคิด
102 bash  syntax 

18
การเปลี่ยนสตริงหลายบรรทัดเป็นคั่นด้วยจุลภาคเดียว
สมมติว่าฉันมีสตริงต่อไปนี้: something1: +12.0 (some unnecessary trailing data (this must go)) something2: +15.5 (some more unnecessary trailing data) something4: +9.0 (some other unnecessary data) something1: +13.5 (blah blah blah) ฉันจะเปลี่ยนมันให้เป็นแบบง่ายๆได้อย่างไร +12.0,+15.5,+9.0,+13.5 ทุบตี?
102 string  bash  shell  csv 

8
จะเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งของผู้โทรภายในฟังก์ชันได้อย่างไร
ฉันกำลังพยายามเขียนฟังก์ชันใน bash ที่จะเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งของสคริปต์ แต่จะถูกแทนที่ด้วยอาร์กิวเมนต์ตำแหน่งของฟังก์ชัน มีวิธีใดบ้างที่ฟังก์ชันจะเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งหากไม่ได้ส่งผ่านอย่างชัดเจน # Demo function function stuff { echo $0 $* } # Echo's the name of the script, but no command line arguments stuff # Echo's everything I want, but trying to avoid stuff $*

10
แบทช์เปลี่ยนชื่อไฟล์ด้วย Bash
Bash จะเปลี่ยนชื่อชุดแพ็กเกจเพื่อลบหมายเลขเวอร์ชันได้อย่างไร ฉันเคยเล่นกับทั้งสองexprและ%%ไม่มีประโยชน์ ตัวอย่าง: Xft2-2.1.13.pkg กลายเป็น Xft2.pkg jasper-1.900.1.pkg กลายเป็น jasper.pkg xorg-libXrandr-1.2.3.pkg กลายเป็น xorg-libXrandr.pkg
101 bash  shell  file-rename 

7
กด alt + numeric ใน bash แล้วคุณจะได้ (arg [numeric]) นั่นคืออะไร?
กด alt + numeric ใน bash แล้วคุณจะได้ (arg [numeric]) นั่นคืออะไร? (คำถามประเภทนี้เหมาะกว่าสำหรับการถามมนุษย์แทนที่จะพยายาม "เดา" คำศัพท์ที่ถูกต้องเพื่อค้นหาในเอกสารทางอินเทอร์เน็ต)

9
การเขียนเอาต์พุตไปยังล็อกไฟล์และคอนโซล
ใน Unix shell ฉันมีไฟล์ env (ไฟล์env กำหนดพารามิเตอร์ที่จำเป็นสำหรับการรันสคริปต์ผู้ใช้เช่นชื่อไฟล์บันทึกและเส้นทางเอาต์พุตการเปลี่ยนเส้นทางและข้อผิดพลาดไปยังไฟล์บันทึกรายละเอียดการเชื่อมต่อฐานข้อมูล ฯลฯ ) ซึ่งเปลี่ยนทิศทางเอาต์พุตทั้งหมด ( ข้อความสะท้อน ) และข้อผิดพลาดกับไฟล์บันทึกจากสคริปต์ที่เรียกใช้งานโดยใช้รหัสต่อไปนี้: exec 1>>${LOG_FILE} exec 2>>${LOG_FILE} ไฟล์ env ถูกเรียกใช้ที่จุดเริ่มต้นของแต่ละสคริปต์ เนื่องจากโค้ดด้านบนในไฟล์ env เอาต์พุตคอนโซลทั้งหมดที่อาจเป็นเอาต์พุตของผู้ใช้หรือข้อผิดพลาดจะถูกส่งออกไปยังไฟล์บันทึกโดยตรงซึ่งเป็นสิ่งที่ฉันต้องการจริงๆ แต่มีเอาต์พุตของผู้ใช้ที่เลือกซึ่งฉันต้องการให้แสดงทั้งในคอนโซลและล็อกไฟล์ แต่เนื่องจากรหัสด้านบนฉันไม่สามารถทำได้ ฉันรู้ว่าถ้าฉันลบโค้ดด้านบนฉันจะได้ผลลัพธ์ที่ต้องการสำหรับกรณีนี้ แต่ฉันจะต้องเขียนผลลัพธ์อื่น ๆ ทั้งหมดลงในไฟล์บันทึกด้วยตนเองซึ่งไม่ใช่เรื่องง่าย มีวิธีรับเอาต์พุตทั้งในคอนโซลและล็อกไฟล์โดยไม่ต้องลบโค้ดด้านบนหรือไม่
101 bash  shell  redirect  logging 

4
แยกสตริงย่อยโดยใช้ regexp ใน bash ธรรมดา
ฉันพยายามดึงเวลาออกจากสตริงโดยใช้ bash และฉันก็มีปัญหาในการหามันออกมา สตริงของฉันเป็นแบบนี้: US/Central - 10:26 PM (CST) และผมต้องการแยก10:26ส่วน มีใครรู้วิธีทำสิ่งนี้ด้วยการทุบตีโดยไม่ใช้ sed, awk ฯลฯ บ้างไหม? เช่นใน PHP ฉันจะใช้ - ไม่ใช่วิธีที่ดีที่สุด แต่ได้ผล - สิ่งที่ชอบ: preg_match( ""(\d{2}\:\d{2}) PM \(CST\)"", "US/Central - 10:26 PM (CST)", $matches ); ขอบคุณสำหรับความช่วยเหลือแม้ว่าคำตอบจะใช้ sed หรือ awk
101 regex  bash 

3
วิธีบอกทุบตีว่าบรรทัดต่อไปในบรรทัดถัดไป
ในสคริปต์ทุบตีฉันได้รับจากโปรแกรมเมอร์คนอื่นบางบรรทัดมีความยาวเกิน 80 คอลัมน์ อะไรคืออักขระหรือสิ่งที่จะเพิ่มในบรรทัดเพื่อระบุว่าบรรทัดต่อไปในบรรทัดถัดไป?
101 bash 

4
วิธีใดที่ดีที่สุดในการนับผลลัพธ์“ ค้นหา”
วิธีแก้ปัญหาปัจจุบันของฉันจะเป็นfind <expr> -exec printf '.' \; | wc -cแต่จะใช้เวลานานเกินไปเมื่อมีผลลัพธ์มากกว่า 10,000 รายการ ไม่มีวิธีที่เร็วกว่า / ดีกว่านี้หรือ
101 bash  find 

3
วิธีออกจากฟังก์ชันใน bash
คุณจะออกจากฟังก์ชันได้อย่างไรหากเงื่อนไขเป็นจริงโดยไม่ต้องฆ่าทั้งสคริปต์เพียงย้อนกลับไปก่อนที่คุณจะเรียกใช้ฟังก์ชัน ตัวอย่าง # Start script Do scripty stuff here Ok now lets call FUNCT FUNCT Here is A to come back to function FUNCT { if [ blah is false ]; then exit the function and go up to A else keep running the function fi }
101 bash  function  exit 

11
bash: mkvirtualenv: ไม่พบคำสั่ง
หลังจากทำตามคำแนะนำในโพสต์ของ Doug Hellmanvirtualenvwrapperฉันก็ยังไม่สามารถเริ่มสภาพแวดล้อมการทดสอบได้ [mpenning@tsunami ~]$ mkvirtualenv test -bash: mkvirtualenv: command not found [mpenning@tsunami ~]$ ควรสังเกตว่าฉันกำลังใช้WORKON_HOMEที่ไม่ได้อยู่ใน$HOMEไฟล์. ฉันพยายามค้นหา/usr/local/bin/virtualenvwrapper.shตามที่แสดงในvirtualenvwrapperเอกสารการติดตั้งแต่ไม่มีอยู่ ฉันใช้ CentOS 6 และ python 2.6.6 ถ้าเป็นเช่นนี้ # File: ~/.bash_profile # ... export WORKON_HOME="/opt/virtual_env/" source "/opt/virtual_env/bin/virtualenvwrapper_bashrc"

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