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

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

6
ทำไม sudo cat ให้การอนุญาตถูกปฏิเสธ แต่ sudo vim ใช้งานได้ดี?
ฉันกำลังพยายามเพิ่มแหล่งที่เก็บโดยอัตโนมัติในไฟล์ pacman.conf ของ arch ของฉัน แต่ใช้echoคำสั่งในเชลล์สคริปต์ของฉัน อย่างไรก็ตามมันล้มเหลวเช่นนี้: - sudo echo "[archlinuxfr]" >> /etc/pacman.conf sudo echo "Server = http://repo.archlinux.fr/\$arch" >> /etc/pacman.conf sudo echo " " >> /etc/pacman.conf -bash: /etc/pacman.conf: Permission denied หากฉันทำการเปลี่ยนแปลงกับ /etc/pacman.conf ด้วยตนเองโดยใช้ vim โดยทำ sudo vim /etc/pacman.conf และเลิกใช้งานเป็นกลุ่ม:wqทุกอย่างทำงานได้ดีและ pacman.conf ของฉันได้รับการอัปเดตด้วยตนเองโดยไม่มีข้อร้องเรียน "ปฏิเสธการอนุญาต" ทำไมจึงเป็นเช่นนั้น? และฉันจะsudo echoไปทำงานได้อย่างไร? (btw ฉันลองใช้sudo catด้วย แต่ก็ล้มเหลวด้วยการปฏิเสธสิทธิ์เช่นกัน)
87 bash  shell  echo  cat 

6
สามารถใช้สคริปต์การเติมแท็บ Bash ใน zsh ได้หรือไม่
ฉันมีสคริปต์การเติมแท็บ Bash สำหรับ Hadoop ของ Apache โดยปกติฉันใช้ zsh เป็นเชลล์แบบวันต่อวัน มันมีแนวโน้มที่จะค่อนข้างทุบตีเมื่อฉันต้องการให้เป็น แต่ดูเหมือนว่าระบบการเติมแท็บจะแตกต่างกันอย่างสิ้นเชิง มีวิธีง่ายๆในการ "แปลง" คำจำกัดความ bash-tab-complete ที่มีอยู่ให้ทำงานใน zsh หรือไม่ ฉันไม่ต้องการเสียเวลามากมายในเรื่องนี้ แต่ถ้ามันง่ายฉันก็จะประหยัดแรงได้พอสมควร

4
VIM: วิธีไปที่บรรทัดที่แน่นอนบน Ubuntu
ฉันใช้viบน Ubuntu 12.10 บางไฟล์ค่อนข้างยาวดังนั้นเมื่อฉันต้องการไปที่ตรงกลางของไฟล์ฉันต้องเลื่อนหน้าลงหรือเลื่อนลง มีทางลัด VIM เพื่อไปยังหมายเลขบรรทัดที่แน่นอนหรือไม่?
87 linux  bash  vim  ubuntu  terminal 

4
Unix เชลล์สคริปต์เพื่อตัดทอนไฟล์ขนาดใหญ่
ฉันกำลังพยายามเขียนสคริปต์ Unix ซึ่งจะตัดทอน / ว่างไฟล์ซึ่งแอปพลิเคชันเขียน / เปิดอย่างต่อเนื่องเมื่อมีพื้นที่ถึง 3GB ฉันรู้ว่าคำสั่งด้านล่างจะทำ: cp /dev/null [filename] แต่ฉันจะเรียกใช้สิ่งนี้ในสภาพแวดล้อมการผลิตโดยอัตโนมัติในฐานะงาน cron - เพียงโพสต์ที่นี่เพื่อดูว่าพวกคุณประสบปัญหาใด ๆ ในขณะที่ทำสิ่งที่คล้ายกันนี้หรือไม่
87 bash  shell  truncate 

20
เปลี่ยนชื่อไฟล์ซ้ำ ๆ โดยใช้ find และ sed
ฉันต้องการอ่านไดเรกทอรีจำนวนมากและเปลี่ยนชื่อไฟล์ทั้งหมดที่ลงท้ายด้วย _test.rb เพื่อลงท้ายด้วย _spec.rb แทน มันเป็นสิ่งที่ฉันไม่เคยคิดมาก่อนว่าจะทำอย่างไรกับการทุบตีดังนั้นคราวนี้ฉันคิดว่าฉันจะพยายามอย่างเต็มที่เพื่อให้มันถูกตอก จนถึงตอนนี้ฉันคิดได้สั้น ๆ แต่ความพยายามที่ดีที่สุดของฉันคือ: find spec -name "*_test.rb" -exec echo mv {} `echo {} | sed s/test/spec/` \; หมายเหตุ: มีเสียงสะท้อนเพิ่มเติมหลังจาก exec เพื่อให้พิมพ์คำสั่งแทนการรันในขณะที่ฉันกำลังทดสอบ เมื่อฉันเรียกใช้ผลลัพธ์สำหรับชื่อไฟล์ที่ตรงกันคือ: mv original original กล่าวคือการแทนที่โดย sed ได้สูญหายไป เคล็ดลับคืออะไร?
87 bash  scripting  sed  find  replace 

5
การขยายตัวทางอ้อมคืออะไร? $ {! var *} หมายความว่าอย่างไร
ฉันกำลังอ่าน " Bash Guide for Beginners " มันบอกว่า: ถ้าอักขระตัวแรกของPARAMETERเป็นเครื่องหมายอัศเจรีย์ Bash จะใช้ค่าของตัวแปรที่สร้างขึ้นจากส่วนที่เหลือPARAMETERเป็นชื่อของตัวแปร จากนั้นตัวแปรนี้จะถูกขยายและค่านั้นจะถูกใช้ในส่วนที่เหลือของการทดแทนแทนที่จะเป็นค่าของPARAMETERตัวมันเอง สิ่งนี้เรียกว่าการขยายตัวทางอ้อม ตัวอย่างที่ให้คือ: franky ~> echo ${!N*} NNTPPORT NNTPSERVER NPX_PLUGIN_PATH ฉันไม่ค่อยเข้าใจที่นี่: ค่าของตัวแปรที่เกิดจากส่วนที่เหลือของ PARAMETER ตามที่PARAMETERเป็นธรรม!N*แล้ว ส่วนที่เหลือของ PARAMETER N*เป็นเพียง สิ่งนี้สร้างตัวแปรได้อย่างไร? Bash ค้นหาคำสั่งที่เป็นไปได้ทั้งหมดหรือไม่?
87 bash  indirection 

6
คำที่ N ในตัวแปรสตริง
ใน Bash ฉันต้องการรับคำที่ N ของสตริงโดยตัวแปร ตัวอย่างเช่น: STRING="one two three four" N=3 ผลลัพธ์: "three" คำสั่ง / สคริปต์ Bash สามารถทำสิ่งนี้ได้อย่างไร
87 bash 

8
จะวนรอบวันที่โดยใช้ Bash ได้อย่างไร?
ฉันมีสคริปต์ทุบตีดังกล่าว: array=( '2015-01-01', '2015-01-02' ) for i in "${array[@]}" do python /home/user/executeJobs.py {i} &> /home/user/${i}.log done ตอนนี้ฉันต้องการวนรอบช่วงวันที่เช่น 2015-01-01 จนถึง 2015-01-31 วิธีการบรรลุใน Bash? อัปเดต : Nice-to-have: ไม่ควรเริ่มงานก่อนที่การรันครั้งก่อนจะเสร็จสิ้น ในกรณีนี้เมื่อ executeJobs.py เสร็จสิ้น bash prompt $จะกลับมา เช่นฉันสามารถรวมwait%1ในวงของฉันได้หรือไม่?
87 bash  loops  date 

2
คุณจะส่งออก. bashrc เป็น. zshrc ได้อย่างไร?
ฉันพยายามย้ายไป zsh จาก Bash ฉันใส่. bashrc ลงใน. zshrc โดยตรงและมันทำให้เกิดข้อผิดพลาดมากมายเมื่อฉันพยายามใช้ Bash อีกครั้ง คุณจะส่งออก. bashrc เป็น. zshrc ได้อย่างไร?
87 zsh  bash  zshrc 

9
วิธีการตั้งค่านามแฝง bash สำหรับคอนเทนเนอร์นักเทียบท่าใน Dockerfile
ฉันยังใหม่กับนักเทียบท่า ฉันพบว่าเราสามารถตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้คำสั่ง ENV ใน Dockerfile แต่หนึ่งจะตั้งค่านามแฝง bash สำหรับคำสั่งแบบยาวใน Dockerfile ได้อย่างไร?

4
ตัวแปรสภาพแวดล้อมของฉันคืออะไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันต้องการค้นหาตัวแปรสภาพแวดล้อมของฉันใน bash เก็บไว้ที่ไหน
86 linux  bash  shell  ubuntu 

10
วิธีเรียกใช้ bash รันคำสั่งภายในเชลล์ใหม่จากนั้นให้การควบคุมกลับไปยังผู้ใช้
สิ่งนี้ต้องเรียบง่ายหรือซับซ้อนจริงๆ แต่ฉันไม่พบอะไรเลย ... ฉันกำลังพยายามเปิดอินสแตนซ์ bash ใหม่จากนั้นเรียกใช้คำสั่งสองสามคำภายในและให้การควบคุมกลับไปยังผู้ใช้ภายในนั้น เช่นเดียวกัน ฉันเหนื่อย: $ bash -lic "some_command" แต่จะดำเนินการsome_commandภายในอินสแตนซ์ใหม่จากนั้นจึงปิด ฉันต้องการให้มันเปิดอยู่ อีกหนึ่งรายละเอียดที่อาจส่งผลต่อคำตอบ: หากฉันสามารถใช้งานได้ฉันจะใช้ใน.bashrcนามแฝงของฉันดังนั้นคะแนนโบนัสสำหรับaliasการนำไปใช้งาน!
86 shell  bash 

4
Bash CTRL เพื่อย้ายเคอร์เซอร์ไปมาระหว่างคำ / สตริง
ฉันคุ้นเคยกับการใช้CTRLปุ่มเพื่อเลื่อนให้เร็วขึ้นเมื่อใช้ปุ่มลูกศรซ้ายและขวา (ไปที่จุดสิ้นสุดของคำแทนที่จะใช้อักขระทีละตัว) ฉันจะทำแบบนั้นด้วยการทุบตีได้หรือไม่? ฉันอาจจะเขียนโค้ดได้ แต่ฉันสงสัยว่ามีบางอย่างที่ง่ายกว่า / ทำได้แล้วหรือยัง
86 bash 

2
การรันโปรแกรมแบบขนานโดยใช้ xargs
ขณะนี้ฉันมีสคริปต์ปัจจุบัน #!/bin/bash # script.sh for i in {0..99}; do script-to-run.sh input/ output/ $i done ฉันต้องการรันแบบขนานโดยใช้ xargs ฉันเหนื่อย script.sh | xargs -P8 แต่การดำเนินการข้างต้นจะดำเนินการเพียงครั้งเดียวในเวลานั้น ไม่มีโชคกับ -n8 ด้วย การเพิ่ม & ที่ท้ายบรรทัดเพื่อดำเนินการในสคริปต์สำหรับลูปจะพยายามเรียกใช้สคริปต์ 99 ครั้งพร้อมกัน ฉันจะดำเนินการลูปเพียง 8 ครั้งในขณะนั้นได้อย่างไรรวมถึง 100

6
ใช้คอลัมน์ที่ n ในไฟล์ข้อความ
ฉันมีไฟล์ข้อความ: 1 Q0 1657 1 19.6117 Exp 1 Q0 1410 2 18.8302 Exp 2 Q0 3078 1 18.6695 Exp 2 Q0 2434 2 14.0508 Exp 2 Q0 3129 3 13.5495 Exp ฉันต้องการใช้คำที่ 2 และ 4 ของทุกบรรทัดดังนี้: 1657 19.6117 1410 18.8302 3078 18.6695 2434 14.0508 3129 13.5495 ฉันใช้รหัสนี้: nol=$(cat "/path/of/my/text" | …
85 linux  bash 

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