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

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

16
สคริปต์ทุบตีการทดสอบหน่วย
เรามีระบบที่มีสคริปต์ bash ที่ทำงานนอกเหนือจากโค้ด Java เนื่องจากเรากำลังพยายามทดสอบทุกสิ่งที่อาจพังได้และสคริปต์ทุบตีเหล่านั้นอาจพังเราจึงต้องการทดสอบ ปัญหาคือยากที่จะทดสอบสคริปต์ทุบตี มีวิธีหรือแนวทางปฏิบัติที่ดีที่สุดในการทดสอบ bash script หรือไม่? หรือเราควรเลิกใช้สคริปต์ทุบตีและมองหาทางเลือกอื่นที่สามารถทดสอบได้?

4
วิธีแยกวิเคราะห์ไฟล์ CSV ใน Bash
ฉันกำลังทำงานกับสคริปต์ Bash แบบยาว ฉันต้องการอ่านเซลล์จากไฟล์ CSV เป็นตัวแปร Bash ฉันสามารถแยกวิเคราะห์บรรทัดและคอลัมน์แรก แต่ไม่สามารถแยกวิเคราะห์คอลัมน์อื่นได้ นี่คือรหัสของฉันจนถึงตอนนี้: cat myfile.csv|while read line do read -d, col1 col2 < <(echo $line) echo "I got:$col1|$col2" done เป็นการพิมพ์คอลัมน์แรกเท่านั้น ในการทดสอบเพิ่มเติมฉันได้ลองทำสิ่งต่อไปนี้: read -d, x y < <(echo a,b,) และ $ y ว่างเปล่า ฉันจึงลอง: read x y < <(echo a b) และ $ Y …
112 linux  bash  csv 


16
สคริปต์ Bash พิมพ์“ ไม่พบคำสั่ง” ในบรรทัดว่าง
ทุกครั้งที่ฉันเรียกใช้สคริปต์โดยใช้bash scriptname.shจากบรรทัดคำสั่งใน Debian ฉันจะได้รับCommand Not foundผลลัพธ์ของสคริปต์ สคริปต์ทำงานได้ แต่จะมีCommand Not Foundคำสั่งพิมพ์บนหน้าจอสำหรับแต่ละบรรทัดว่างเสมอ แต่ละบรรทัดว่างทำให้ไม่พบคำสั่ง ฉันกำลังเรียกใช้สคริปต์จาก/varโฟลเดอร์ นี่คือสคริปต์: #!/bin/bash echo Hello World ฉันเรียกใช้โดยพิมพ์ต่อไปนี้: bash testscript.sh เหตุใดจึงเกิดขึ้น
112 linux  bash  debian 

16
วิธีการแตกไฟล์ csv หนึ่งคอลัมน์
หากฉันมีไฟล์ csv มีวิธีทุบตีด่วนในการพิมพ์เนื้อหาจากคอลัมน์เดียวหรือไม่ สามารถสันนิษฐานได้อย่างปลอดภัยว่าแต่ละแถวมีจำนวนคอลัมน์เท่ากัน แต่เนื้อหาของแต่ละคอลัมน์จะมีความยาวต่างกัน
111 bash  csv  extract 

8
BASH คัดลอกไฟล์ทั้งหมดยกเว้นไฟล์เดียว
ฉันต้องการคัดลอกไฟล์ทั้งหมดออกจาก dir ยกเว้นไฟล์ชื่อ Default.png ดูเหมือนว่ามีหลายวิธีในการทำเช่นนี้ อะไรที่ดูเหมือนจะมีประสิทธิภาพมากที่สุดสำหรับคุณ?
111 bash  scripting  copy 

2
หมายความว่าอย่างไรในเชลล์เมื่อเราใส่คำสั่งไว้ในเครื่องหมายดอลลาร์และวงเล็บ: $ (คำสั่ง)
ฉันแค่ต้องการเข้าใจบรรทัดของโค้ดต่อไปนี้ในเชลล์ ใช้เพื่อรับไดเร็กทอรีการทำงานปัจจุบัน ฉันทราบว่า$(variable)ชื่อส่งคืนค่าภายในชื่อตัวแปร แต่$(command)ควรส่งคืนอะไร มันคืนค่าหลังจากรันคำสั่งหรือไม่? ในกรณีนั้นเราสามารถใช้`เพื่อดำเนินการคำสั่ง CWD="$(cd "$(dirname $0)"; pwd)" ผลลัพธ์เดียวกันสามารถนำมาจากบรรทัดของโค้ดต่อไปนี้และในเชลล์เวอร์ชันอื่น DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ฉันไม่สามารถเข้าใจความหมายของและ$(cd..$(dirname ใครช่วยฉันคิดว่าคำสั่งนี้ดำเนินการอย่างไร
111 bash  shell  terminal  sh  ksh 

14
ฉันจะรันคำสั่งใด ๆ ที่แก้ไขไฟล์ (อาร์กิวเมนต์)“ ในสถานที่” โดยใช้ bash ได้อย่างไร
ฉันมีไฟล์ temp.txt ที่ฉันต้องการจัดเรียงด้วยsortคำสั่งใน bash ฉันต้องการให้ผลลัพธ์ที่เรียงลำดับแทนที่ไฟล์ต้นฉบับ สิ่งนี้ใช้ไม่ได้เช่น (ฉันได้รับไฟล์เปล่า): sortx temp.txt > temp.txt สามารถทำได้ในบรรทัดเดียวโดยไม่ต้องคัดลอกไปยังไฟล์ชั่วคราวหรือไม่? แก้ไข: -oตัวเลือกนี้ยอดเยี่ยมมากสำหรับsort. ฉันใช้sortในคำถามของฉันเป็นตัวอย่าง ฉันพบปัญหาเดียวกันกับคำสั่งอื่น ๆ : uniq temp.txt > temp.txt. มีวิธีแก้ปัญหาทั่วไปที่ดีกว่านี้หรือไม่?

5
ความแตกต่างของสตริงใน Bash
ฉันกำลังพยายามหาวิธีกำหนดความแตกต่างระหว่างสองสตริงในสคริปต์ของฉัน ฉันสามารถทำได้อย่างง่ายดายด้วย diff หรือ comm แต่ฉันไม่ได้จัดการกับไฟล์และฉันไม่ต้องการส่งออกไปยังไฟล์ทำการเปรียบเทียบและอ่านกลับ ฉันเห็นว่า comm, diff, cmp ทั้งหมดอนุญาตให้ส่งไฟล์สองไฟล์หรือไฟล์และอินพุตมาตรฐาน - ฉันเดาว่าดีถ้าฉันไม่ต้องการส่งออกสองไฟล์ ... แต่มันก็ยังแย่อยู่ ฉันคิดว่าฉันสามารถใช้ grep หรือนิพจน์ทั่วไป - แต่ฉันเดาว่าไม่
110 string  bash 

28
วิธีที่มีประสิทธิภาพในการเปลี่ยนไฟล์ใน Bash
ฉันมีไฟล์ขนาดใหญ่ที่คั่นด้วยแท็บในรูปแบบนี้ X column1 column2 column3 row1 0 1 2 row2 3 4 5 row3 6 7 8 row4 9 10 11 ฉันต้องการเปลี่ยนมันอย่างมีประสิทธิภาพโดยใช้คำสั่ง bash เท่านั้น (ฉันสามารถเขียนสคริปต์ Perl สิบบรรทัดหรือมากกว่านั้นเพื่อทำสิ่งนั้น แต่ควรจะดำเนินการช้ากว่าฟังก์ชันทุบตีดั้งเดิม) ดังนั้นผลลัพธ์ควรมีลักษณะดังนี้ X row1 row2 row3 row4 column1 0 3 6 9 column2 1 4 7 10 column3 2 5 8 11 ฉันคิดหาทางออกเช่นนี้ …
110 bash  parsing  unix  transpose 


7
วนซ้ำไฟล์ทั้งหมดที่มีนามสกุลเฉพาะ
for i in $(ls);do if [ $i = '*.java' ];then echo "I do something with the file $i" fi done ฉันต้องการวนซ้ำแต่ละไฟล์ในโฟลเดอร์ปัจจุบันและตรวจสอบว่าตรงกับนามสกุลที่ระบุหรือไม่ โค้ดด้านบนใช้ไม่ได้คุณรู้ไหมว่าทำไม?
110 bash  file  glob 

4
ทุบตีคำเตือนที่ไม่มีข้อโต้แย้งและการตัดสินคดี
ฉันกำลังเรียนรู้การทุบตี ฉันต้องการทำสคริปต์ง่ายๆที่เมื่อไม่มีการโต้แย้งจะแสดงข้อความบางอย่าง และเมื่อฉันให้ตัวเลขเป็นอาร์กิวเมนต์ s ขึ้นอยู่กับค่ามันทำอย่างใดอย่างหนึ่ง ฉันต้องการทราบคำแนะนำสำหรับคู่มือออนไลน์ที่ดีที่สุดสำหรับผู้เริ่มต้นในการทุบตี ขอบคุณ
110 bash 

9
จะบังคับให้ 'cp' เขียนทับไดเร็กทอรีแทนที่จะสร้างอันใหม่ภายในได้อย่างไร
ฉันกำลังพยายามเขียนสคริปต์ Bash ที่จะเขียนทับไดเร็กทอรีที่มีอยู่ ฉันมีไดเร็กทอรีfoo/และฉันกำลังพยายามเขียนทับbar/ด้วย แต่เมื่อฉันทำสิ่งนี้: cp -Rf foo/ bar/ สร้างbar/foo/ไดเร็กทอรีใหม่ ฉันไม่ต้องการสิ่งนั้น มีสองไฟล์ในfoo/; aและb. มีไฟล์ที่มีชื่อเดียวกันอยู่bar/ด้วย ฉันต้องการfoo/aและfoo/bแทนที่bar/aและbar/b.
110 linux  bash  shell  command-line  cp 

3
การแก้ไขตัวแปรในเชลล์
filepath=/tmp/nameฉันมีตัวแปรที่เรียกว่า ในการเข้าถึงตัวแปรฉันรู้ว่าฉันสามารถทำได้: $filepath ในเชลล์สคริปต์ของฉันฉันพยายามทำบางสิ่งเช่นนี้ (มีจุดมุ่งหมายเพื่อ backticks) `tail -1 $filepath_newstap.sh` บรรทัดนี้ล้มเหลว duuh! เนื่องจากไม่ได้เรียกตัวแปร $filepath_newstap.sh ฉันจะต่อท้าย_newstap.shชื่อตัวแปรได้อย่างไร โปรดทราบว่า backticks มีไว้สำหรับการประเมินนิพจน์
110 bash  shell  unix 

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