ฉันกำลังสร้างแพ็คเกจผู้จัดจำหน่าย AWS เพื่อแก้ไขการกำหนดค่า syslog บนเซิร์ฟเวอร์ Linux รุ่นต่างๆ ฉันเขียนสคริปต์ทุบตีง่ายๆ สองสามตัวเพื่อจัดการการติดตั้ง ถอนการติดตั้ง และอัปเดต ฉันคิดว่านี่จะเป็นสากล อย่างไรก็ตาม วันนี้ฉันพบว่า AWS ใช้ ช
เพื่อดำเนินการสคริปต์ (เช่น sh install.sh
) และบน Ubuntu/Debian ค่าดีฟอลต์จะเป็น DASH ไม่ใช่ BASH ด้วยเหตุนี้สคริปต์ของฉันจึงล้มเหลวด้วย:
ข้อผิดพลาดในการอัปเดต: update.sh: 3: update.sh: ฟังก์ชัน: ไม่พบ
update.sh: 9: update.sh: ข้อผิดพลาดทางไวยากรณ์: "}" ที่ไม่คาดคิด
ไม่สามารถเรียกใช้คำสั่ง: ออกจากสถานะ 2
ติดตั้งแพ็คเกจไม่สำเร็จ สถานะการติดตั้งล้มเหลว
ฉันไม่สามารถเปลี่ยนพฤติกรรมของ AWS ได้ และฉันไม่ต้องการแก้ไขการกำหนดค่าใดๆ บนเซิร์ฟเวอร์ ดังนั้นดูเหมือนว่าตัวเลือกเดียวของฉันคือตัวเลือกที่แก้ไขไฟล์สคริปต์เอง
การตั้งค่าแรกคือการทำให้สคริปต์เป็นสากลเพื่อให้สามารถทำงานบน Linux ได้ทุกรสชาติ การตั้งค่าที่สองคือการสร้างสคริปต์อื่นสำหรับ Debian ที่เข้ากันได้กับ DASH
ขออภัย ฉันไม่พบข้อมูลเกี่ยวกับการเขียนโปรแกรม dash มากนัก ข้อเสนอแนะใด ๆ
3 สคริปต์ที่เป็นปัญหาคือ....
ติดตั้ง.sh
#!/bin/bash
ฟังก์ชันติดตั้ง {
ถ้า sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; แล้ว
จริง
อื่น
เท็จ
ไฟ
}
ถ้าติดตั้ง; แล้ว
ทางออก 0
อื่น
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
บริการ sudo rsyslog รีสตาร์ท
ไฟ
ถอนการติดตั้ง.sh
#!/bin/bash
ฟังก์ชันติดตั้ง {
ถ้า sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; แล้ว
จริง
อื่น
เท็จ
ไฟ
}
ถ้าติดตั้ง; แล้ว
sudo rm /etc/rsyslog.d/xdr.conf
บริการ sudo rsyslog รีสตาร์ท
อื่น
ทางออก 0
ไฟ
update.sh
#!/bin/bash
ฟังก์ชัน isDiff {
ถ้า sudo diff xdr.conf /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; แล้ว
เท็จ
อื่น
จริง
ไฟ
}
ถ้า isDiff; แล้ว
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
บริการ sudo rsyslog รีสตาร์ท
อื่น
ทางออก 0
ไฟ