problem mit fifo & dd - keine reaktion

Diskutiere problem mit fifo & dd - keine reaktion im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hi Ich habe ein problem mit einem fifo Folgender code: tmp="`mktemp`" rm -f "$tmp" mkfifo "$tmp" chmod 0600 "$tmp" echo $tmp #OK echo...

  1. Gast1

    Gast1 Guest

    Hi
    Ich habe ein problem mit einem fifo
    Folgender code:

    Code:
    tmp="`mktemp`"
    rm -f "$tmp"
    mkfifo "$tmp"
    chmod 0600 "$tmp"
    
    echo $tmp #OK
    echo -e "$1\n$2\n$3\n$4" #OK
    
    dd if="$1" of="$2" bs="$3" count="$4" 2>$tmp
    exit
    Es wird eine temporäre Datei erstellt, und dann soll dd gestartet werden, und dessen stderr-ausgabe in diese datei geleitet werden.
    Die Datei existiert, und hat auch die nötigen Rechte, Besitzer passt auch.
    Aber wenn dd gestartet wird, passiert nichts.
    of ist /dev/fd0 - aber das Diskettenlaufwerk wird nicht angesprochen
    lasse ich dass 2>$tmp weg, funktioniert's
    packe ich ein & hinter die zeile, wird zwar das diskettenlaufwerk kurz angesprochen, aber geschrieben werden nur wenige sektoren (es ist kurz ein schreibzugriff zu hören, aber dann wird nichts mehr draufgeschrieben)

    Was ist falsch?

    shell: bash-3.2
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo,
    wozu muss es denn ein fifo sein?
    Lass doch diese 2 Zeilen mal weg ...
    rm -f "$tmp"
    mkfifo "$tmp"
    ... tritt das Problem dann noch auf ?
    Gruss zst
     
  4. Gast1

    Gast1 Guest

    Dass funktioniert. Allerdings fordert der weitere teil des scriptes ein fifo
    Ich poste mal das gesammte script:
    Code:
    #!/bin/bash
    
    DLGBACKTITLE="dd progress"
    
    if [ $# != 4 ] ; then
    	echo "$0 infile outfile blocksize blockcount"
    	exit 1
    fi
    
    if [ ! -f $1 ] ; then
    	dialog --backtitle "$DLGBACKTITLE" --title "error" --msgbox "$1 does not exist!" 5 50
    	exit 1
    fi
    
    max="$4"
    
    tmp="`mktemp`"
    rm -f "$tmp"
    #mkfifo "$tmp"
    touch $tmp
    chmod 0600 "$tmp"
    
    #echo $tmp
    #echo -e "$1\n$2\n$3\n$4"
    #exit
    
    dd if="$1" of="$2" bs="$3" count="$4" 2>$tmp &
    pid=$!
    exit #zum debuggen
    
    while [ -d /proc/$pid ] ; do
    	kill -USR1 $pid >/dev/null 2>/dev/null
    
    	read > /dev/null #uninteressant
    	read line
    	read > /dev/null #uninteressant
    	
    	curval="`echo "$line" | cut -d " " -f 1 | cut -d "+" -f 1`"
    	percent="$(( $curval * 100 / $max ))"
    	echo $percent
    
    	sleep 1
    done <"$tmp" | dialog --backtitle "$DLGBACKTITLE" --title "Copying..."  --gauge "Copy $1 to $2..." 7 40 0
    Aber warum funktioniert es mit einem fifo nicht?
     
  5. #4 Gast1, 28.06.2009
    Zuletzt von einem Moderator bearbeitet: 28.06.2009
    Gast1

    Gast1 Guest

    Das problem scheint kill zu sein.
    Gebe ich den folgenden code per hand in die shell ein, funktioniert alles bestens. Aber im script führt es zu Problemen. (dd bricht ohne fehlermeldung ab
    Code:
    dd if="$1" of="$2" bs="$3" count="$4" &
    pid=$!
    kill -SIGUSR1 $pid # >/dev/null 2>/dev/null
    In der shell ist nur folgender hinweis zu sehen:
    Code:
    ddp.sh: line 43:  5511 Benutzerdefiniertes Signal 1    dd if="$1" of="$2" bs="$3" count="$4"
    --- EDIT ---
    ein sleep 1 zwischen dd und kill hat das Problem behoben.
    Manchmal kann die Lösung so einfach sein :D
    (Ich werde das fertige script später posten)

    --- EDIT 2---
    Das fertige Script:
    Code:
    #!/bin/bash
    
    DLGBACKTITLE="dd progress"
    
    if [ $# != 4 ] ; then
    	echo "$0 infile outfile blocksize blockcount"
    	exit 1
    fi
    
    if [ ! -f $1 ] ; then
    	dialog --backtitle "$DLGBACKTITLE" --title "error" --msgbox "$1 does not exist!" 5 50
    	exit 1
    fi
    
    max="$4"
    
    tmp="`mktemp`"
    rm -f "$tmp"
    touch $tmp
    chmod 0600 "$tmp"
    
    dd if="$1" of="$2" bs="$3" count="$4" 2>$tmp &
    pid=$!
    while [ -d /proc/$pid ] ; do
    	sleep 1
    	kill -SIGUSR1 $pid >/dev/null 2>/dev/null
    
    	if [ -s $tmp ] ; then
    		line="`tail -n 2 $tmp | head -n 1 | cut -d "+" -f 1`"
    
    		curval=$line
    		percent="$(( $curval * 100 / $max ))"
    		echo $percent
    	fi
    done | dialog --backtitle "$DLGBACKTITLE" --title "Copying..."  --gauge "Copy $1 to $2..." 7 40 0 
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

problem mit fifo & dd - keine reaktion

Die Seite wird geladen...

problem mit fifo & dd - keine reaktion - Ähnliche Themen

  1. Problem bei der installation einer Sun Netzwerkkarte

    Problem bei der installation einer Sun Netzwerkkarte: Guten Morgen zusammen, beim installieren einer zusätzlichen Netzwerkkarte habe ich ein Problem. Die Karte wird nicht automatisch installiert. Es...
  2. Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

    Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe: Liebe Community, zurzeit arbeite ich an eine Active Directory Domäne die mittels Samba läuft. Dazu habe ich einen AD DC auf Debian 8.7 mit Samba...
  3. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....
  4. Verständnisproblem Samba / LDAP

    Verständnisproblem Samba / LDAP: Hallo zusammen! Ich habe unter Ubuntu 16.04 einen LDAP und Samba Server aufgesetzt. Diese scheinen auch ordnungsgemäß zu funktionieren, sodaß ich...
  5. nginx+php-fpm problem

    nginx+php-fpm problem: Moin, ich hab hier gerade ein Problem und keine Idee mehr woran es liegt. Ich muss wie schon in der Überschrift erwähnt nginx dazu bringen php...