Zdarza mi się używać techniki 'skrypt, który wygeneruje skrypt, który,... ' i dość często z wykorzystaniem basha. Czasem rodzi to drobne problemy,
np. skrypt generujemy jako userX, a wykonujemy jako userY, niektóre zmienne środowiskowe zostały rozwiązane na podstawie środowiska userX.
cat<<-FOOBAR
echo Hello $USER
FOOBAR
cat<<-FOOBAR
echo Hello $USER
FOOBAR
cat<<-'FOOBAR'
echo Hello $USER
FOOBAR
cat<<-'FOOBAR' > greeting.sh
echo Hello $USER
FOOBAR
export GREETING=Hello
cat<<-FOOBAR
echo $GREETING \$USER
FOOBAR
Kurtyna.
wszystko się zgadza - zobacz : https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04
Poza tym te spacje co psują delimiter to byle jaki ogarnięty edytor tekstu zmieni zakolorowanie zmiennej. Ostatni przykład jest idiotyczny bo '' escapeuje - nic nadzwyczajnego.
Bardziej przejebane to jest jak czytasz plik while read -r line I masz na przykład spacje przed końcem linii bez IFS= on Ci tą spacje w w"$line" usunie. Nieźle co? Shell jest wredny ;> Ale fajny ;-)
@slsy: na pewno się spotkałeś, tylko pod inną nazwą :) np. szablon + coś co go wypełnia -> nowy skrypt (zobacz sobie np. helmowy szablon dla nginxa, tam po deploymencie dostajesz kilka linijek, które robią port forwarding portu kontenera na interfejs hosta). Z innych przykładów, to bazy danych i zapytanie, które generuje nowe zapytanie (np. "zwróć mi nazwy wszystkich tabel ze schematu C, które mają między X a Y wierszy", albo przy migracjach danych, z logicznego mapowania robi fizyczne skrypty). Masz np. toola, który na podstawie konfiguracji potrafi zainstalować klaster WebLogica, pododawać data sources, itd., ale nie chcesz tego toola upubliczniać, za to wypuszczasz wygenerowany skrypt, który został przez narzędzie wypluty).
Miałem ale bez przesady to jest 101 sh. a co do usrXY problem to nie możesz zrobić su userY ? Tyle, że to tylko część env podmieni.
Nie mam pojęcia co to jest 101 sh, google zwraca syntezator Roland SH-101 ;-) Co do 'su', to różnie bywa, czasem zwyczajnie nie ma do tego dostępu ze względu na wdrożoną politykę bezpieczeństwa.
Rozumiem problem generowania templatów, ale bash to ostatni język o którym pomyślałbym z uwagi na: słabe testowanie (generowanie templatów bardzo łatwo się testuje) i upierdliwość języka, o której jest ten post
Możesz podać przykład? Chyba nigdy się z czymś takim nie spotkałem