„Echo” drukuje opcje w crontab

0

Używam Rasbian 3.12.26+ na modelu Pi B.

Oto jak wygląda mój wpis crona:

* * * * * sleep 11; { echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log

Oto jak wygląda mój dziennik:

-en \e[1;4;33m
Thu Sep  4 14:29:13 UTC 2014
-en \e[0m
This is output from curl!

Jednak po wklejeniu polecenia do bash działa to zgodnie z przeznaczeniem:

{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log

I wynik jest

Thu Sep  4 14:27:51 UTC 2014
This is output from curl!

Pierwszy wiersz jest podkreślony, pogrubiony i żółty zgodnie z przeznaczeniem.

Z jakiegoś powodu po uruchomieniu przez crontab echo wypisuje „-en” zamiast traktować go jako argument. W rezultacie sekwencje zmiany koloru nie są usuwane.

Co daje?

Nikita240
źródło

Odpowiedzi:

2

Prawdopodobnie cron używa / bin / sh. Przekonaj się, porównując wyniki następujących czynności:

/bin/sh -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'

Powyżej wytwarza otrzymywane dane wyjściowe

/bin/bash -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'

Podczas gdy to samo polecenie w bash tworzy pożądane wyjście

Alex Zeffertt
źródło
Jak mogę zmienić, który crontab powłoki wykonuje?
Nikita240,
dodaj SHELL = / bin / bash na swoim
cronie
Innym sposobem na uzyskanie sekwencji ucieczki w celu uzyskania koloru jest zmiana echo(którą powłoka traktuje jako wbudowane polecenie) na /bin/echo(który jest osobnym programem). (Jeśli to nie zadziała, spróbuj /usr/bin/echo.)
G-Man,