C, C++, Java, PHP, Ruby...

Pravila foruma

U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori

[Bash] Povratak na dialog nakon izvršene naredbe

19 tra 2020, 16:25

Radim skripti koja bi služila za uključivanje pcscd.service na Arch Linuxu i ovo je što sam do sada kodirao

Kod:
#!/bin/bash
HEIGHT=15
WIDTH=50
CHOICE_HEIGHT=4
BACKTITLE="UKLJUCI ILI ISKLJUCI CITAC PAMETNIH KARTICA"
TITLE="Citac kartica"
MENU="Odaberi:"

OPTIONS=(1 "Ukljuci"
         2 "Iskljuci"
         3 "Instaliraj potrebne pakete (Arch Linux)"
         4 "Skeniraj citac i karticu (Arch Linux)")

CHOICE=$(dialog --clear \
                --backtitle "$BACKTITLE" \
                --title "$TITLE" \
                --cancel-label "PREKID" \
                --menu "$MENU" \
                $HEIGHT $WIDTH $CHOICE_HEIGHT \
                "${OPTIONS[@]}" \
                2>&1 >/dev/tty)

clear
case $CHOICE in
        1)
            systemctl start pcscd.service
            ;;
        2)
            systemctl stop pcscd.service
            ;;
        3)
            sudo pacman -S ccid opensc pcsc-tools
            ;;
        4)
            pcsc_scan
            ;;
esac


Skripta radi super, ali želio bih još dodati da mi se nakon svake izvršene naredbe ponovo pokaže dialog, a ne da mi ugasi cijelu skriptu. Ono što sam našao do sad je da upotrijebim petlju, ali, s obzirom da se ne razumijem puno u Bash, svaki put kad unesem promjene u skriptu pokvarim je do te mjere da ne radi više pa molim za pomoć na materinjem jeziku :-D

Bonus stvar (koja može, ali nije toliko bitna) je da li je moguće odmah na početku skripte dobiti da se unese lozinka pa da ju više ne treba unositi (i da ju odmah testira je li dobra ili nije da ne bi kasnije u skripti bilo problema?

P.S. S obzirom da sam prije već imao temu o Bash-u, ako admini i moderatorit misle da bi bilo dobro da ovo i ono bude jedna tema sa jedinstvenim nazivom onda molim da ih spojite.

Re: [Bash] Povratak na dialog nakon izvršene naredbe

20 tra 2020, 14:24

Nisam ti pregleda cilu skriptu jer čitam ovo na mobu, ali ovo prvo, da se ne ugasi nego da se ponovo pokaže izbornik je vrlo jednostavno riješiti koristeći funkcije.

Tipa:
Kod:
KRENI () { # ime funkcije
neki niz
naredbi
if [ $? = 0 ]; then
 KRENI # po završetku pozovi samu sebe
fi
}
KRENI # pozovi funkciju



Za unos lozinke na početku i da te dalje ne pita isto:
Kod:
LOZINKA=`zenity --entry --hide-text --text "Upiši lozinku korisnika $(whoami)"

a dalje samo pozivaš/provjeriš dal' je varijabla $LOZINKA prazna ili ne.

Inače, lozinku sudo naredbi prosljeđuješ ovako:
Kod:
echo "$LOZINKA" | sudo -S naredba-koja-traži-sudo


Možeš napraviti i dvi varijable, npr. LOZINKA1 i LOZINKA2 te ih usporediti jesu li iste pa da znaš dal' si je dobro natipkao.
Test ispravnosti lozinke možeš provjeriti tako da pozoveš bilo koju naredbu uz sudo, npr. sudo echo " " > /tmp/test
Ako ti $? nije 0, lozinka je neispravna.

Eto, nadam se da sam ti bar malo pomogao. :-)

Re: [Bash] Povratak na dialog nakon izvršene naredbe

20 tra 2020, 19:40

Super :-D Hvala na odgovoru.

Ovaj dio o vraćanju na dialog mi je pomogao. Unos lozinke mi ne radi, ali valjda nisam dobro shvatio.

Jedino što sad u cijeloj skripti mi cancel label ne gasi terminal nego mi ponovo vraća skriptu (naravno). Ima li način da se samo za tu naredbu (znači "cancel label") napravi iznimka pa da gasi skriptu i terminal?

Re: [Bash] Povratak na dialog nakon izvršene naredbe

20 tra 2020, 22:16

Nisam siguran kako radi dialog, zenity je puno jednostavniji. Ako imaš podignut display server (x ili wayland), koristi zenity dialoge, bolje izgledaju i lakše ih podesiš. ;)

Ako želiš da ti tipka cancel ugasi skriptu, napraviš if;

if [ $? != 0 ]; then
exit $?
else
napravi nešto drugo
fi

I to je to.
Odgovori