problem mit fifo & dd - keine reaktion

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Gast1, 23.06.2009.

  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. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...
  2. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  3. Problem bei apt-get upgrade (Kali 2.0)

    Problem bei apt-get upgrade (Kali 2.0): Hi, seit paar Tagen habe ich einige Probs. Dachte es sei mal an der Zeit für ein Update und nun tauchen da einige Fehler auf: Es müssen noch 0 B...
  4. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  5. Problem mit Win-Zugriff auf SAMBA

    Problem mit Win-Zugriff auf SAMBA: Hallo rundherum, vielleicht hat jemand eine Idee... Habe jetzt schon 1 1/2 Tage damit verbraten und den Fehler nicht gefunden. Problem:...