Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: Nefunkční DiskDebug  (Přečteno 2706 krát)

Milhouse

  • Moderátor
  • Guru
  • *****
  • Příspěvků: 5676
  • Karma: +234/-37
    • Zobrazit profil
Nefunkční DiskDebug
« kdy: 27 Leden 2011, 16:16:02 »
Hele šikulové, mohl by někdo juknout na nefunkční DiskDebug skript? Viz třeba http://forum.ubuntu.cz/index.php/topic,53639.msg385668.html#msg385668

Pár postřehů:
- Ten natvrdo nastavený Gedit není nejlepší. Lze nastavit výchozí editor systému? Chudáci neGnomáci. ;)
- V Kubuntu nemám standardně Zenity, mohlo by to hodit nějakou chybovou hlášku o nepřítomnosti v systému?

Díkes...

N. Á. V. O. D. Y.
 "...naše práce není vidět, ale je důležitá!"

jmp

  • Závislák
  • ****
  • Příspěvků: 2570
  • Karma: +242/-32
    • Zobrazit profil
Re: Nefunkční DiskDebug
« Odpověď #1 kdy: 27 Leden 2011, 17:43:21 »
mozna by stacilo nahradit
Kód: [Vybrat]
       $prikaz | diff -wB - /tmp/$i.txtza
Kód: [Vybrat]
       $prikaz | cat /tmp/$i.txt
EDIT: mozna lepe za
Kód: [Vybrat]
       cat /tmp/$i.txt
        $prikaz | diff -wB - /tmp/$i.txt
(at je tam puvodni stav plus pripadny rozdil - takhle je tam jenom rozdil...)
« Poslední změna: 27 Leden 2011, 18:18:57 od jmp »

jmp

  • Závislák
  • ****
  • Příspěvků: 2570
  • Karma: +242/-32
    • Zobrazit profil
Re: Nefunkční DiskDebug
« Odpověď #2 kdy: 28 Leden 2011, 18:30:34 »
tohle uz by mohlo fungovat
pokud neni gedit, tak to zkusi v xtermu spustit less a tomu predhodi vysledky (xterm a less jsou snad vsude)

Kód: [Vybrat]
#! /bin/bash

Devkit(){
which udisks &> /dev/null || { echo "$RANDOM - udisks není v systému"; return; }
for i in /dev/[sh]d[a-z]*; do
        udisks --show-info $i
done
}

if [[ `whoami` != "root" ]]; then
        zenity --info --title="DiskDebug" --text="Musíš být root!\nSpouštěj skript přes gksudo."
        exit 1
fi

##### zde je možné přidávat příkazy ######
DiskPrikazy=( "foo" "dmesg" "lsusb" "fdisk -l" "parted -l" "mount" "blkid -c /dev/null" "ls -l /media" "Devkit" )
SystemPrikazy=( "foo" "uname -a" "cat /etc/lsb-release" "free -m" "df -Th" )
##########################################

TempSoubor=`mktemp`

# adresář, z kterého spouštíme skript
AktAdresar=$(cd $(dirname "$0");pwd)
# existuje AktAdresar?
# pokud ne, přepokládej $HOME nebo /tmp
[[ -z $AktAdresar ]] && AktAdresar="$HOME"
[[ -z $AktAdresar ]] && AktAdresar=/tmp

PocetDiskPrikazu=$((${#DiskPrikazy[@]} - 1))
PocetSystemPrikazu=$((${#SystemPrikazy[@]} - 1))
CelkemPrikazu=$(($PocetDiskPrikazu * 2 + $PocetSystemPrikazu + 15))

zenity --info --title="DiskDebug" --text="Krok č.1/2:\n\nOdpoj zařízení pomocí \"Odpojit\" (pokud je vidět ikona).\n Potom ho vysuň fyzicky z počítače, nebo ho vypni.\n\nAž bude odpojené, nebo pokud již bylo odpojené, klikni OK."
# progress bar
# pokud klikne uživatel Cancel, nestačí to dát do proměnné - je to v souboru $TempSoubor
# ten se pak testuje v průběhu skriptu a la '[[ -s $TempSoubor ]] && exit 1'
exec 3> >(zenity --progress --title="DiskDebug" --percentage=0 --auto-close --width=300 || echo cancel > $TempSoubor)

j=1
for i in $(seq 1 $PocetDiskPrikazu); do
                prikaz=${DiskPrikazy[$i]}
                echo $(($j * 100 / $CelkemPrikazu)) >&3
                echo "# ${j}/${CelkemPrikazu} - ${prikaz}" >&3
                $prikaz &> /tmp/$i.txt
                [[ -s $TempSoubor ]] && exit 1
                ((j++))
                sleep 0.2
done

zenity --info --title="DiskDebug" --text="Krok č.2/2:\n\nZnovu připoj nebo zapni zařízení.\n\nAž bude připojené, klikni OK."
for i in {1..14}; do
                echo $(($j * 100 / $CelkemPrikazu)) >&3
                echo "# ${j}/${CelkemPrikazu} - Sbírám data..." >&3
                [[ -s $TempSoubor ]] && exit 1
                ((j++))
                sleep 1
done

exec &> "$AktAdresar/výsledky.txt"

for i in $(seq 1 $PocetDiskPrikazu); do
        echo $(($j * 100 / $CelkemPrikazu)) >&3
        prikaz=${DiskPrikazy[$i]}
        echo "# ${j}/${CelkemPrikazu} - ${prikaz}" >&3
        echo
        echo $prikaz
        echo ---------------------------
        cat /tmp/$i.txt
        $prikaz | diff -wB - /tmp/$i.txt
        [[ -s $TempSoubor ]] && exit 1
        ((j++))
        sleep 0.2
done

for i in $(seq 1 $PocetSystemPrikazu); do
        echo $(($j * 100 / $CelkemPrikazu)) >&3
        prikaz=${SystemPrikazy[$i]}
        echo "# ${j}/${CelkemPrikazu} - ${prikaz}" >&3
        echo
        echo $prikaz
        echo ---------------------------
        $prikaz
        [[ -s $TempSoubor ]] && exit 1
        ((j++))
        sleep 0.2
done

if zenity --question --title="DiskDebug" --text="Hotovo.\n\nByl vytvořen soubor $AktAdresar/výsledky.txt.\n\nChceš ho rovnou otevřít?"; then
        editor="gedit"
        which "$editor" &> /dev/null || editor="xterm -e less "
        $editor "$AktAdresar/výsledky.txt" &
fi

exit 0

Milhouse

  • Moderátor
  • Guru
  • *****
  • Příspěvků: 5676
  • Karma: +234/-37
    • Zobrazit profil
Re: Nefunkční DiskDebug
« Odpověď #3 kdy: 28 Leden 2011, 20:50:01 »
Nefunkční. já to jen hlásím, se skriptováním nejsem kamarád. :)

N. Á. V. O. D. Y.
 "...naše práce není vidět, ale je důležitá!"

jmp

  • Závislák
  • ****
  • Příspěvků: 2570
  • Karma: +242/-32
    • Zobrazit profil
Re: Nefunkční DiskDebug
« Odpověď #4 kdy: 29 Leden 2011, 09:53:55 »
asi by se hodil vystup (pokud by bylo videt, co nefunguje)

jinak uz nevim - na mem stroji to funguje (vypis "dmesg" "lsusb" "fdisk -l" "parted -l" "mount" "blkid -c /dev/null" "ls -l /media" "Devkit" uz neni prazdny a pokud editor prepisu z gedit napr na BLA, tak se mi vysledek otevre v less)
na to abych prisel na pricinu nemam dostatecne rozsahle znalosti a testovani na velkem mnozstvi stroju a variant systemu by bylo casove narocne a stejne by to zdaleka nepokrylo celou skalu variant, ktera se mezi lidma muze vyskytovat - asi to bude muset zkusit odhalit nekdo jiny...