Squeeze cron-bol bash para

Biztos, valami lámaságba futottam bele, de nem jövök rá.

A script csinál dolgokat, egy változóba gyűjti szövegként,hogy sikerültek-e a lépések, a végén a változót beletolja pipe-on egy mail-be, a lényeg:

#/bin/sh (bash is ugyanaz)
LEVELTORZS="elso sor\n"
LEVELTORZS+="masodik sor\n"
LEVELTORZS+="harmadik sor\n"

echo -e $LEVELTORZS | mail -s "subject" cimzettmailcim

--
lenny alatt működik hibátlanul konzolból is, cron-ból is
squeeze alatt hibátlan konzolból, cronból ez van a levelben:

-e elso sor

Azt már kideriváltam, hogy squeeze alatt cron-ban a -e kapcsoló a default echo-nál, tehát ha LEVELTORZS="elso sor\nmasodik sor\nharmadik sor\n" egy értékadásban van, akkor -e kapcsoló nélkül is működik a sortörés a mailben, de a += nem, cron-ban futtatva nem append-el.

Mi a két futtatás között a környezeti különbség?

Köszi

Hozzászólások

Ez pedig határozottan úgy tűnik, mintha a system default shell a dash lenne - ez normális, upgrade-nél, új telepítéseknél rá is kérdez - és te azt próbálod használni. A dash pedig, ahogy a manjában sem szerepel, nem támogatja a builtin echonál a "-e" opciót. De ha nem a builtin parancsot használod, hanem a /bin/echo-t, akkor lesz "-e" opciód is:


$ bash -c "echo -e szoveg"
szoveg
$ dash -c "echo -e szoveg"
-e szoveg
$ dash -c "/bin/echo -e szoveg"
szoveg
$

Másodsorban szintén olyat vársz el a dash-től, amit nem tud, és nem is állítja magáról, hogy tud:


$ man bash | grep +=
       In the context where an assignment statement is assigning a value to a shell variable or array index, the += operator can be used to  append  to
       or  add  to the variable's previous value.  When += is applied to a variable for which the integer attribute has been set, value is evaluated as
       an arithmetic expression and added to the variable's current value, which is also evaluated.  When += is applied to an array variable using com‐
       = *= /= %= += -= <<= >>= &= ^= |=
$ man dash | grep +=
$

Ha mindnképpen ragaszkodsz a += operátorhoz, akkor bash, és ha már bash, akkor lesz a builtinjében "echo -e" is. Vagy használod a dash-t, lemondasz a += operátor élvezetéről, és megoldod a szokásos módon:


$ dash -c 'LEVELTORZS="elso sor\n" ; LEVELTORZS="${LEVELTORZS}masodik sor\n" ; LEVELTORZS="${LEVELTORZS}harmadik sor\n" ; echo "$LEVELTORZS"'
elso sor
masodik sor
harmadik sor

$