Temat: zakomentowanie polecenie w cronie za pomocą "sed"

Witam
Męcze się z prostym skryptem. Potrzebuje czasem wyłączyć niektóre funkcje z crona ale nie chce ich usuwać. Dlatego chce dopisywać i kasować komentarze na początku linii z konkretnych poleceń. Stworzyłem taki skrypt:

#!/bin/sh
file=/etc/crontabs/root
sed '/odczyt.sh/s/^/#/' $file

/etc/init.d/cron restart

czyli w cronie wyszukuje mi linię zawierającą "odczyt.sh" i na początku tej linii ma dopisać znak "#"
Wszystko wydaje się ładnie po odpaleniu skryptu w konsoli. Widać że znak został dopisany. Ale dlaczego w rzeczywistości nie pojawia się w cronie? Otwieram przez scp plik z crona i nie wpisało mi tego znaku "#" mimo że w konsoli po wykonaniu skryptu widać:

root@Gargoyle:~# /www1/skrypt.sh
# 0,10,20,30,40,50 * * * * /pogoda/odczyt.sh
0 0,4,8,12,16,20 * * * date -u  +"%Y.%m.%d-%H:%M:%S" >/usr/data/time_backup
0,1,11,21,31,41,51 * * * * /usr/bin/set_kernel_timezone >/dev/null 2>&1
0 0,4,8,12,16,20 * * * /tmp/bw_backup/do_bw_backup.sh


Co nie tak robie sed'em?

2

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

sed -i

to zmieni w pliku, inaczej wywali to na konsolę.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

dziękuje poszło smile jednak za mało sie dokształciłem na temat sed'a

4

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

potrzebuje jeszcze pomocy z sed'em
mam takie coś:

file=/www1/cgi-bin/decision/numer
x=`cat $file`
act=/www1/cgi-bin/decision/action
cond=/www1/cgi-bin/decision/condition
plik=/src/stany1.sh
sed -i 's/);;/$act$x)$cond$x;;/g' $plik

zasada działania ma być taka, że zmieniam wartość zmiennej x.  I sed ma mi zamieniać linie w pliku "stany1.sh" z wartości ");;" na "/www1/cgi-bin/decision/action1)/www1/cgi-bin/decision/condition1;;"
Chodzi o to że w sed nie działa mi przekazanie podstawionych zmiennych za pomocą $act, $cond $x. Jak to zrobić żeby do plku już mi zapisywał to co jest pod tymi zmiennymi?

5

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

sed -i 's/);;/'"$act""$x"')'"$cond""$x"';;/g' $plik

Shell zmienne zamieni na konkretne wartości a sed to wykona jak by były normalnie wpisane (weź po uwagę że część z nich to  ' a część ").

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

hmm no nic się nie zmienia w pliku jak tak zrobiłem. Skrypt wygląda tak:

#!/bin/sh
file=/www1/cgi-bin/decision/numer
x=`cat $file`
act=/www1/cgi-bin/decision/action
cond=/www1/cgi-bin/decision/condition
plik=/src/stany1.sh
sed -i 's/);;/'"$act""$x"')'"$cond""$x"';;/g' $plik

7

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

A teraz zrób sh -x ./tenskrypt i dowiesz się czy podstawia czy nie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

no wygląda na to że podstawia smile więc dziwne dlaczego przez scp jak otwieram plik to nie widać zmain. W konsoli jest ok

root@Gargoyle:~# sh -x /www1/cgi-bin/decision/dopisz.sh
+ file=/www1/cgi-bin/decision/numer
+ cat /www1/cgi-bin/decision/numer
+ x=4
+ act=/www1/cgi-bin/decision/action
+ cond=/www1/cgi-bin/decision/condition
+ plik=/src/stany1.sh
+ sed -i s/);;//www1/cgi-bin/decision/action4)/www1/cgi-bin/decision/condition4;;/g /src/stany1.sh

9

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

Nie możesz używać / w zmennych w takiej konstrukcji.

s!!!g zamiast s///g zrób.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

dzięki Cezary za pomoc, wszystkie wskazówki pomogły i działa tak jak chciałem. Nie chce zakładać kolejnego tematu, a mam kolejny problem. Tym razem w danym katalogu przeszukuje pliki i szukam w nich zawartosci IN1=closed. Zrobiłem coś takiego

`grep IN1=closed /www1/cgi-bin/decision/condition*`

to mi przeszukuje wszystkie pliki "condition" ale jak znajdzie w którymś zawartość to mi ją zwraca. A ja potrzebuje żeby mi zwróciło w którym to pliku znalazł, potrzebuje adres tego pliku, lub konkretną nazwe, czy było to condition1, condition2.... Jak to zrobić?

11

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

Przeczytać manual od grepa smile

grep -l IN1=closed /www1/cgi-bin/decision/condition*

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

walczę z kolejnym problemem przy budowie skryptu. Mam w katalogu pliki o nazwach: action1, action2, action3... i potrzebuje wykonać skrypt który po usunięciu któregoś z środkowych plików np action2 pozostałe posortuje i ponumeruje od nowa, czyli te wyższe przeskoczą o numerację niżej.
Druga kwestia to w innym pliku usuwam także linijke zawierającą wyrażenie action2 i teraz także musiałbym ten plik jakoś przesortować żeby numeracje przeskoczyły w linijkach i były po kolei.
Byłbym bardzo wdzięczny za jakieś podpowiedzi bo za bardzo nie mam pomysłu jak się za to zabrać. Ewentualnie jakiś krótki przykład jak można to zrobić.

13

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

Cóż, najprościej i najgłupiej - lecieć po kolei,  i jak nie ma pliki to znaleźć następny i go przenumerować.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

chyba nie poradze sobie tak szybko z tym skryptem...  nie wiem jak mam po kolei odczytywać i porównywać te nazwy plików. Narazie doszedłem tylko to pomysłu z pętlą for

for sort in `ls /www1/cgi-bin/decision/ | grep action`; do

To mi wyszuka wszystkie pliki "action" i pętla wykona się tyle razy ile jest tych plików. Zmian nazw plików mam dokonać chyba przy pomocy tr ale dalej już nie wiem. Cezary byłbyś tak dobry i pomógł stworzyć ten skrypt, lub jakbyś miał chwile to napisał go? Tworze "jednostkę decyzyjną" do karty przekaźników, dzięki której bedzie można decydować o zdarzeniach w/g ustawień. Czyli po zwarciu których wejść, które przekaźniki mają sie załączać itd. Mam już wszystko tylko teraz te usuwanie ustawień mi zostało. Później pokaże całość na eko.one smile

15

Odp: zakomentowanie polecenie w cronie za pomocą "sed"

for i in `seq 1 100`; do
if [ -e "plik$i" ]; then
   plik "plik$i" istnieje!"
fi
done

?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.