Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Instrukcja case - problem przy wyborze anuluj.  (Przeczytany 10554 razy)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #15 dnia: 2014-02-07, 17:07:11 »
     esac ;;
     echo "Podaj sciezke..."
     read sciezka
     tar $opcje $sciezka
->
     esac
     echo "Podaj sciezke..."
     read sciezka
     tar $opcje $sciezka
     ;;

krzysiek486

  • Gość
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #16 dnia: 2014-02-07, 20:19:39 »
Skrypt działa jak należy, wszystko pięknie.
Wielkie dzięki za to, tylko jakiś pomysł jak zrobić to za pomocą skryptu okienkowego?
Takie było zadanie. Zrobić to za pomocą np. inputboxa, w którym użytkownik będzie mógł wpisać np. archiwum.tar plik1 plik2 plik3, a skrypt to odczyta jako tar -cf archiwum1.tar plik1 plik2 plik3. To samo działanie, tylko wprowadzenie w okienku.

krzysiek486

  • Gość
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #17 dnia: 2014-02-08, 13:01:10 »
Trochę poszperałem i znalazłem coś takiego:
...
esac
dialog --title "Wprowadz..." \\
--backtitle "Okienko" \\
--inputbox "Wprowadz sciezke..." 8 40 \\
2> y
read x < y
tar $opcje $x
;;
Działa, jednak chciałem sobie sprawdzić ten skrypt na czystym koncie.
Zrobiłem nowe, skopiowałem skrypt. Odpalam, wybieram rodzaj archiwizacji, pokazuje się inputbox i tu się wywala. Obojętnie co zrobię (wpiszę coś lub nacisnę anuluj) pokazuje mi błąd:
Cytuj
You must specify one of the `-Acdtrux` or `--test-label` options"
Co jest nie tak? Pytam, bo na jednym użytkowniku działa, na drugim nie.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #18 dnia: 2014-02-08, 17:11:27 »
"You must specify one of the `-Acdtrux` or `--test-label` options"
To komunikat z tar.
Dodaj sobie "echo" przed poleceniem tar i zobacz z jakimi parametrami jest wywoływany.
Podstawy debugowania się kłaniają.

Do odczytywania danych z dialog-u nie potrzeba plików tymczasowych:
dialog --title "Wprowadz..." \\
--backtitle "Okienko" \\
--inputbox "Wprowadz sciezke..." 8 40 \\
2> y
read x < y
wystarczy:
x=`dialog --stdout --title "Wprowadz..." \\
--backtitle "Okienko" \\
--inputbox "Wprowadz sciezke..." 8 40`
Zwracam uwagę na użyte cudzysłowy: ` (grawis)

krzysiek486

  • Gość
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #19 dnia: 2014-02-08, 20:17:58 »
Jest błąd kiedy nic nie wybieram tylko klikam enter. Wtedy jest właśnie powyższy error.
Drugi błąd pokazuje przy anulowaniu lub wyjścia ze skryptu poprzez ESC przy oknie inputbox.
W drugiej sytuacji błąd to:
Cytuj
tar: option requires an argument -- `f`
Chodzi o to, że nie podajemy nazwy, a parametr -f jest po to, żeby user ją wprowadził?
Wtedy wystarczyłoby dodać komunikat o tym, żeby wprowadzić na początku nazwę. Tylko moje pytanie brzmi - to jest ten błąd o którym myślę?
Jeszcze jedno - jaką funkcję pełni --stdout? Jest niezbędne?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #20 dnia: 2014-02-08, 22:02:11 »
To chyba dość oczywiste, że skoro wpisujesz pusty ciąg albo klikasz Anuluj czy ESC, to zmienna będzie pusta, a więc nie przekażesz wymaganych parametrów (nazw plików).
Sprawdź zmienną test-em przed wykonaniem tar-a:
if [ -n "$x" ]; then
    tar ....
else
    echo "Nie podałeś plików!"
    exit 1
fi
Po znaczenie parametru odsyłam tu: man test

Domyślnie dialog wypluwa wynik na standardowe wyjście błędów (stderr=2). Dlatego w swoim kodzie musiałeś przekierowywać "2>" pliku y.
Parametr --stdout powoduje, że wynik przekazywany jest na standardowe wyjście (stdout=1), więc do pliku mógłbyś je kierować zwyczajnie za pomocą "> y". Tylko po co używać pliku, skoro `...` lub $(...) pozwalają zapisać to standardowe wyjście polecenia od razu do zmiennej.

krzysiek486

  • Gość
Instrukcja case - problem przy wyborze anuluj.
« Odpowiedź #21 dnia: 2014-02-09, 10:06:39 »
Okej, wszystko jest jasne. Skrypt śmiga aż miło.
Wielkie, wielkie, wielkie dzięki!
Podziękowania dla vanhelzing'a, darkdancer'a za pracę włożoną w napisanie powyższego i wielkie dzięki dla ultr'a, za mega pomoc i wytrwałość :-)
W razie problemów, które dla was są banalne, wiem gdzie uderzyć, dzięki!