Nowe posty

xx [SOLVED] Poczta Linux.pl (9)
Wczoraj o 15:09:29
xx Dostęp z komputerów z windowsem do plików udostępnionych na serwerze linux (samb (0)
2022-08-08, 20:27:55
xx FirebirdSQL server w xinetd (0)
2022-08-08, 16:39:49
xx brak uprawnienia do zamontowanej partycji ntfs - elementaryOS 6,1 (5)
2022-08-08, 06:36:07
xx Jak zainstalować sterowniki do karty sieciowej TP LINK WN350GD (1)
2022-08-04, 05:55:46
xx Ubuntu vs Fedora (1)
2022-07-26, 03:40:58
xx virtualization technology (1)
2022-07-25, 21:27:10
xx Migracja z centos 6 na centos 7 (3)
2022-07-25, 07:31:19
xx akonadi w KDE5 (10)
2022-07-22, 23:34:05
xx Alternatywa dla Delphi (7)
2022-07-22, 15:27:42

Autor Wątek: Instrukcja case - problem przy wyborze anuluj.  (Przeczytany 10259 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!