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
- 5147 megtekintés
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
$
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm, megvilágosodtam:-) A dash volt a kulcsszó, ami kiesett nálam.., meg a lámaságom, hogy kihagytam a felkiáltójelet a shebang-ból, ezért nem tűnt fel az egész, mikor váltogattam az sh-t bash-ra
- A hozzászóláshoz be kell jelentkezni