Strona 1 z 1

skrypt pobierający nazwę katalogu z pliku

: 01 lipca 2010, 21:04
autor: Mich@ł
Potrzebuję uruchomić na serwerze prosty skrypt, który będzie pobierał nazwę katalogu z pliku tekstowego po czym będzie go usuwał.

Obecnie napisałem coś takiego:

Kod: Zaznacz cały

while  read line  
do  
    echo $line;
    rm -rdf $line
done < plik.txt

A tak wygląda plik z danymi:

Kod: Zaznacz cały

nazwa1
nazwa2
nazwa3
Odczyt pliku chyba działa poprawnie, ponieważ w konsoli pojawiają mi się poszczególne linie. Nie wiem czemu nie chce działać plecenie:

Kod: Zaznacz cały

rm -rdf $line
Gdy wpisuję w konsoli polecenie:

Kod: Zaznacz cały

rm -rdf nazwa_katalogu
to katalog ładnie się usuwa.

W czym może być problem? W skrypcie basha nie mogę używać takich poleceń, czy problem jest w składni?

Od razu mówię, że to moje jedno z pierwszych spotkań z bashem.

Z góry dzięki za pomoc.

Edycja:
Jak widzę problem jest ze zmienną:

Kod: Zaznacz cały

$line
ponieważ po wpisaniu nazwy na sztywno katalog się usuwa.

Dziwne, że nie chce działać gdy dam zmienną pobraną z pliku.

: 02 lipca 2010, 19:01
autor: piter
Wpisałem sobie Twój skrypt i u mnie działa. Zobacz:

Kod: Zaznacz cały

$ cat run
while  read line  
do  
    echo $line;
    rm -rdf $line
done < plik.txt

Kod: Zaznacz cały

$ cat plik.txt 
nazwa1
nazwa2
nazwa3

Kod: Zaznacz cały

$ ls
nazwa1  nazwa2  nazwa3  plik.txt  run

Kod: Zaznacz cały

$ ./run 
nazwa1
nazwa2
nazwa3

Kod: Zaznacz cały

$ ls
plik.txt  run
Z tego co piszesz rozumiem, że polecenie echo w skrypcie działa Ci prawidłowo tzn. w konsoli pojawiają się nazwy poszczególnych katalogów zapisanych w pliku "plik.txt". A co się dzieje w przypadku polecenia rm - nic się nie pokazuje? Przecież powinny być jakieś komunikaty o błędach np. że nie ma takiego katalogu, albo nie masz praw do usunięcia tego katalogu.

: 03 lipca 2010, 15:59
autor: godlark
Gdy nie masz dostępu, to komunikat o braku dostępu się *powinien wyświetlać, u mnie się* wyświetla. Podejrzewam, że tych plików po prostu nie ma lub ich nie znaleziono

Kod: Zaznacz cały

#! /bin/bash
while  read line  
do  
    echo $line;
    rm -rdfv $line
done < plik.txt
Opcja "v" powoduje, że przed usunięciem każdego pliku wyświetla:

Kod: Zaznacz cały

usunięty `nazwa_pliku'
jeśli pliku nie znaleziono to nic nie wyświetla.