[solved] Wird hier nach vorhandenen Verzeichnissen gesucht?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

[solved] Wird hier nach vorhandenen Verzeichnissen gesucht?

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

Re: Wird hier nach vorhandenen Verzeichnissen gesucht?

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.

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: Wird hier nach vorhandenen Verzeichnissen gesucht?

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.

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Wird hier nach vorhandenen Verzeichnissen gesucht?

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.
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: Wird hier nach vorhandenen Verzeichnissen gesucht?

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. :D

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: [solved] Wird hier nach vorhandenen Verzeichnissen gesuc

Beitrag von pangu » 02.12.2013 13:49:35

Vielen Dank euch Allen ! :THX:
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.

Antworten