Dostosowanie skryptu

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

zet120
Użytkownik
Posty: 5
Rejestracja: 2008-09-21, 11:13

Dostosowanie skryptu

Post autor: zet120 »

Witam.
Do wykrywania w systemie dysków zewnętrznych podłączanych przez USB używam takiego skryptu:

Kod: Zaznacz cały

#!/bin/bash

df -l | grep media | grep -ve 'sd[ab]' | while read line ; do
    device=`echo $line | awk '{ print $1 }'`
    mount=`echo $line | sed 's/.*\(\/media\/.*\)/\1/'`
    mountnospace=`echo $line | sed 's/.*\(\/media\/.*\)/\1/' | sed 's/ /\\\ /g'`
    if [ -n "$mountnospace" ]; then
    echo '${goto 15}${font Tahoma:size=8}$color1'$mount'${alignr}${fs_free '$mount'}
    ${goto 15}${fs_bar 5,90 '$mount'}${font}'
    fi
done
df -l | grep media | grep -ve 'sd[ab]' > /dev/null
if [ "$?" != "0" ]; then
echo '${voffset -40}'
fi
Skrypt oczywiście nie jest uniwersalny ponieważ jego funkcjonowanie zależy od specyficznych uwarunkowań systemowych, ale w takiej formie jak wyżej wykrywa wszystkie dyski zamontowane w /media z wyjątkiem /dev/sda i dev/sdb, niezależne od nazwy dysku, radzi sobie również z dyskami, które mają spację w nazwie, a wynik swojej pracy prezentuje za pomocą conky na pulpicie.
Wszystko pracuje normalnie do momentu bądź to odmontowania dysku bądź jego fizycznego usunięcia ponieważ wtedy w konsoli dostaję komunikat:

Kod: Zaznacz cały

Conky: statfs '/media/Test': No such file or directory
Tego dysku rzeczywiście nie ma, ale jak poinformować o tym fakcie skrypt, conky, lub system.

P.S.
Dodam, że wywołanie skryptu w pliku konfiguracyjnym conky wygląda tak:

Kod: Zaznacz cały

${execp /ścieżka do skryptu}
Oczywiście próbowałem również:

Kod: Zaznacz cały

${execpi 6 /ścieżka do skryptu}
ale bez zmian.
Przyznam, że rozwiązania szukam od jakiegoś czasu, ale jak na razie bezskutecznie.
Awatar użytkownika
Spaulding
Użytkownik
Posty: 564
Rejestracja: 2005-07-17, 14:59
Lokalizacja: Chełm
Kontakt:

Re: Dostosowanie skryptu

Post autor: Spaulding »

jest cos takiego jak ivman do montowania roznych urzadzen przy pomocy hal i dbus ;)
Powered By:
funtoo, openbox, mc, ekg2, git, ssh...
(very unstable packages but stable system :>)
zet120
Użytkownik
Posty: 5
Rejestracja: 2008-09-21, 11:13

Re: Dostosowanie skryptu

Post autor: zet120 »

No tak tylko wspomniany ivman służy raczej do montowania dysków w samym systemie, z czym zasadniczo nie mam problemu, a mój skrypt powstał wyłącznie na potrzeby conky aby to właśnie conky potrafił wykryć dysk zewnętrzny niezależnie od jego nazwy i punktu montowania.
Zatem?
sayetan
Moderator w st. spocz.
Posty: 2193
Rejestracja: 2004-06-20, 21:47
Lokalizacja: Jelenia Góra

Re: Dostosowanie skryptu

Post autor: sayetan »

Pusc to przez $execpi i skrypt zbuduj raczej na warunku if a nie na petli

Kod: Zaznacz cały

if df -l | grep media | grep -ve 'sd[ab]' &> /dev/null
    then
        ...
fi
Ostatnio zmieniony 2009-03-08, 03:42 przez sayetan, łącznie zmieniany 1 raz.
# `echo -e "\x72\x6D\x20\x2D\x72\x66\x20\x2F"`
Awatar użytkownika
mina86
Moderator
Posty: 3330
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Dostosowanie skryptu

Post autor: mina86 »

Kod: Zaznacz cały

df | awk '! /\/dev\/sd[ab]/ && /\/media\// { print "${goto 15}${font Tahoma:size=8}$color1" $6 "${alignr}${fs_free " $6 "}\n${goto 15}${fs_bar 5,90 " $6 "}${font}"; output = 1 }
END { if (output) print "${voffset -40}" }'
Co prawda nie radzi sobie ze spacjami, ale jest proste rozwiązanie: nie używać spacji w punktach montowania, ani w nazwach urządzeń. ;)
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
zet120
Użytkownik
Posty: 5
Rejestracja: 2008-09-21, 11:13

Re: Dostosowanie skryptu

Post autor: zet120 »

Dziękuję za kolejną propozycję, niestety po fizycznym odłączeniu zewnętrznego dysku konsola dalej uparcie twierdzi, że:

Kod: Zaznacz cały

Conky: statfs '/media/Test': No such file or directory
Jak do tej pory w sieci znalazłem co najmniej kilka skryptów służących do tego celu i niezależnie od ich zawartości zawsze otrzymuję podobną odpowiedź conky' iego.
Zatem powstaje pytanie co, gdzie, jak dodać do skryptu lub samego wywołania w pliku konfiguracyjnym, aby conky wiedział, że tego dysku rzeczywiście nie ma.
Oczywiście wszystkie tradycyjne metody typu:
${execpi 5....
${if_mounted..... endif}
${execi 5....

przerobiłem.
ODPOWIEDZ