Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
pangu
- Beiträge: 1400
- Registriert: 15.11.2011 20:50:52
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: /proc/1
Beitrag
von pangu » 02.12.2013 12:23:29
Hi @ll,
ich habe aus einem init.d Skript ein snippet, zu dem ich folgende Frage habe:
Code: Alles auswählen
[...]
findDirectory()
{
OP=$1
shift
for L in $* ; do
[ $OP $L ] || continue
echo $L
break
done
}
if [ -z "$FOOBAR_RUN" ]
then
FOOBAR_RUN=`findDirectory -w /var/run /usr/var/run /tmp`
fi
[...]
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
if [ -f $FOOBAR_RUN/foobar.pid ]
then
echo "BlaBla ist AKTIV mit der PID="`cat $FOOBAR_RUN/foobar.pid`
exit 0
fi
echo "BlaBla ist INAKTIV"
exit 1
;;
*)
echo "Usage: $0 {start|stop|status}" >&2
exit 3
;;
esac
Wird quasi in der For-Schleife getestet, ob eines des drei Verzeichnisse (/var/run, /usr/var/run oder /tmp) existieren und sobald das erste gefunden wird, wird die Schleife abgebrochen? Und was macht der Schalter -w nach dem Aufruf der Funktion findDirectory() ???
Zuletzt geändert von
pangu am 02.12.2013 13:49:24, insgesamt 1-mal geändert.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.
-
newdeb
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Beitrag
von newdeb » 02.12.2013 13:21:28
Code: Alles auswählen
$ help test | grep -- -w
-w FILE True if the file is writable by you.
-
Phineas
- Beiträge: 354
- Registriert: 20.06.2012 20:26:19
Beitrag
von Phineas » 02.12.2013 13:23:26
-w (writable) testet auf Existenz und Schreibbarkeit. Sobald also ein beschreibbares Dir gefunden ist, gibt die Funktion es zurück.
Edit: newdeb war schneller.
-
habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von habakug » 02.12.2013 13:24:54
Hallo!
Das "OP=$1" bezieht sich auf den Parameter hinter "findDirectory" und wird mit dem Wert "-w" gefüllt. Daraus wird z.B. der Test "[' -w /var/run ']" gebastelt, der prüft ob ein Verzeichnis beschreibbar ist.
Code: Alles auswählen
set -x
findDirectory()
{
OP=$1
shift
for L in $* ; do
[ $OP $L ] || continue
echo $L
break
done
}
if [ -z "$FD_RUN" ]
then
FD_RUN=`findDirectory -w /var/run /usr/var/run /tmp`
fi
echo $FD_RUN
gibt als User:
Code: Alles auswählen
$ ./fd_test.sh start
++ '[' -z '' ']'
+++ findDirectory -w /var/run /usr/var/run /tmp
+++ OP=-w
+++ shift
+++ for L in '$*'
+++ '[' -w /var/run ']'
+++ continue
+++ for L in '$*'
+++ '[' -w /usr/var/run ']'
+++ continue
+++ for L in '$*'
+++ '[' -w /tmp ']'
+++ echo /tmp
+++ break
++ FD_RUN=/tmp
++ echo
/tmp
und als root:
Code: Alles auswählen
# /home/work/fd_test.sh start
++ '[' -z '' ']'
+++ findDirectory -w /var/run /usr/var/run /tmp
+++ OP=-w
+++ shift
+++ for L in '$*'
+++ '[' -w /var/run ']'
+++ echo /var/run
+++ break
++ FD_RUN=/var/run
++ echo /var/run
/var/run
So kann man einen Platz z.B. für eine PID finden. Der Break kommt, wenn das beschreibbare Verzeichnis gefunden ist.
Gruss, habakug
edit:
Ich war der langsamste.
-
Phineas
- Beiträge: 354
- Registriert: 20.06.2012 20:26:19
Beitrag
von Phineas » 02.12.2013 13:37:30
habakug hat geschrieben:edit:
Ich war der langsamste.
Aber auch der Ausführlichste. Nun ist der Thread wohl noch gelöster, als gelöst.
-
pangu
- Beiträge: 1400
- Registriert: 15.11.2011 20:50:52
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: /proc/1
Beitrag
von pangu » 02.12.2013 13:49:35
Vielen Dank euch Allen !
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.