Creez un pachet de distribuitor AWS pentru a modifica configurația syslog pe diferite variante de servere Linux. Am scris câteva scripturi bash simple pentru a gestiona instalarea, dezinstalarea și actualizarea. Am crezut că asta va fi universal. Cu toate acestea, astăzi am aflat că AWS folosește SH
pentru a executa scriptul (de ex. sh install.sh
) și pe Ubuntu/Debian, acesta este implicit DASH și nu BASH. Din acest motiv, scripturile mele eșuează cu:
erori de actualizare: update.sh: 3: update.sh: funcție: nu a fost găsită
update.sh: 9: update.sh: Eroare de sintaxă: „}” neașteptată
nu a reușit să ruleze comenzi: starea de ieșire 2
Pachetul nu s-a instalat; stare de instalare Eșuat
Nu pot schimba comportamentul AWS. Și nu vreau să modific nicio configurație pe server. Deci, s-ar părea că singurele mele opțiuni sunt cele care modifică fișierul script în sine?
Prima preferință ar fi să faceți scriptul universal, astfel încât să poată rula pe orice versiune de Linux. A doua preferință ar fi să creați un script diferit pentru Debian, care să fie compatibil cu DASH.
Din păcate, nu găsesc multe informații despre programarea liniuțelor. Orice sugestii?
Cele 3 scenarii în cauză sunt....
install.sh
#!/bin/bash
funcția este instalată {
dacă sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; atunci
Adevărat
altfel
fals
fi
}
dacă este Instalat; atunci
iesirea 0
altfel
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
sudo service rsyslog restart
fi
uninstall.sh
#!/bin/bash
funcția este instalată {
dacă sudo ls /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; atunci
Adevărat
altfel
fals
fi
}
dacă este Instalat; atunci
sudo rm /etc/rsyslog.d/xdr.conf
sudo service rsyslog restart
altfel
iesirea 0
fi
update.sh
#!/bin/bash
function isDiff {
dacă sudo diff xdr.conf /etc/rsyslog.d/xdr.conf >/dev/null 2>&1; atunci
fals
altfel
Adevărat
fi
}
if isDiff; atunci
sudo cp xdr.conf /etc/rsyslog.d/xdr.conf
sudo service rsyslog restart
altfel
iesirea 0
fi