@CarstenHa: Nicht böse sein, aber ich musste gerade herzlich lachen beim lesen des Skripts.
Du prüfst ob zenity vorhanden ist, und wenn nicht zeigst Du einen entsprechenden Hinweis an — mit zenity. 😉
Die Ausgabe von mount zu greppen ist umständlich und fehleranfällig. Du musst das Muster beispielsweise am Zeilenanfang verankern und danach auch ein Leerzeichen angeben. Ohne das Leerzeichen würde im konkreten Fall beispielsweise auch /dev/sdh10 erkannt. Die Manpage von mount verweist für solche Aufgaben auf findmnt.
Die ganze if/else-Logik in der 3× die gleiche Zeile zum Starten des Programms steht, ist überkompliziert. Das Programm wird ja letztlich in jedem Fall gestartet, muss da also überhaupt gar nicht in diesem Konstrukt das Programm starten, sondern kann diese Zeile einmal hinter das Konstrukt setzen.
Ausserdem sind die Zweige so simpel, dass man das auch ohne if ausdrücken kann.
Last but not least: Wenn man das Programm am Ende von Skript nicht als Kindprozess startet, sondern den Shell-Prozess dadurch ersetzt, hat man einen unnötigen Prozess weniger herumhängen während das Programm läuft.
Ungetestet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/bin/bash
# Mit diesem Skript wird ein Dialog vor dem eigentlichen Programmstart
# vorgeschaltet.
# Hier wird bei 'ja' Festplatte gemountet.
readonly devicebez=/dev/sdh1
if type -p zenity >/dev/null; then
# zenity --info \
# --title "Hinweis" \
# --text "Zenity ist nicht installiert. Festplatteneinbindung bitte manuell vornehmen."
exit 1
fi
! findmnt -rno SOURCE "$devicebez" >/dev/null \
&& zenity --question \
--title "Festplatte einbinden" \
--text "Soll Festplatte gemountet werden?" \
&& gio mount -d "$devicebez"
exec programmname "$@"
|