skrypt pobieraj

Potrzebujesz pomocy z C, C++, perl, python, itp.
Mich@ł
Posty: 5
Rejestracja: 01 lipca 2010, 21:02

skrypt pobierający nazwę katalogu z pliku

Post 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.
piter
Beginner
Posty: 128
Rejestracja: 09 lutego 2008, 12:45

Post 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.
Awatar użytkownika
godlark
Posty: 51
Rejestracja: 17 stycznia 2009, 14:33

Post 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.
ODPOWIEDZ