Tôi đang tạo gói nhà phân phối AWS để sửa đổi cấu hình nhật ký hệ thống trên các phiên bản khác nhau của máy chủ Linux. Tôi đã viết một vài tập lệnh bash đơn giản để xử lý việc cài đặt, gỡ cài đặt và cập nhật. Tôi nghĩ rằng điều này sẽ là phổ quát. Tuy nhiên, hôm nay tôi phát hiện ra rằng AWS sử dụng sh
để thực thi tập lệnh (tức là sh cài đặt.sh
) và trên Ubuntu/Debian, điều này mặc định là DASH chứ không phải BASH. Vì lý do đó, tập lệnh của tôi không thành công với:
lỗi cập nhật: update.sh: 3: update.sh: chức năng: không tìm thấy
update.sh: 9: update.sh: Lỗi cú pháp: "}" không mong muốn
không thể chạy lệnh: thoát trạng thái 2
Không thể cài đặt gói; trạng thái cài đặt Không thành công
Tôi không thể thay đổi hành vi AWS. Và tôi không muốn sửa đổi bất kỳ cấu hình nào trên máy chủ. Vì vậy, có vẻ như các tùy chọn duy nhất của tôi là tùy chọn sửa đổi chính tệp script?
Ưu tiên đầu tiên là làm cho tập lệnh trở nên phổ biến để nó có thể chạy trên bất kỳ hương vị nào của Linux. Tùy chọn thứ hai là tạo một tập lệnh khác cho Debian tương thích với DASH.
Thật không may, tôi không tìm thấy nhiều thông tin về lập trình dấu gạch ngang. Bất kỳ đề xuất?
3 kịch bản trong câu hỏi là ....
cài đặt.sh
#!/bin/bash
chức năng được cài đặt {
nếu sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; sau đó
thật
khác
sai
fi
}
nếu được cài đặt; sau đó
thoát 0
khác
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
khởi động lại dịch vụ sudo rsyslog
fi
gỡ cài đặt.sh
#!/bin/bash
chức năng được cài đặt {
nếu sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; sau đó
thật
khác
sai
fi
}
nếu được cài đặt; sau đó
sudo rm /etc/rsyslog.d/xdr.conf
khởi động lại dịch vụ sudo rsyslog
khác
thoát 0
fi
cập nhật.sh
#!/bin/bash
hàm isDiff {
nếu Sudo diff xdr.conf /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; sau đó
sai
khác
thật
fi
}
nếu làDiff; sau đó
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
khởi động lại dịch vụ sudo rsyslog
khác
thoát 0
fi