Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Sonstiges » C-SHELL-Experten hier? » Themenansicht

Autor Thread - Seiten: -1-
000
25.07.2015, 17:59 Uhr
kaiOr

Avatar von kaiOr

Hallo,

ich versuche mein WEGA-Startcript "rc_csh" aufzupeppeln und bin nur am anecken. Momentan verstehe ich nicht, warum mein getimter Hintergrundprozess mit "sleep 8; kill -9...dd" nicht greift, er rödelt zwar im Hintergrund, aber das Terminal wartet beharrlich weiter auf Zeicheneingabe. Selbiges habe ich auch schon mit "sleep 8; kill -2...csh" also SIGINT versucht damit "onintr" greift, doch dort gibt es auch keine Reaktion. Das Tool "awk" habe ich von /usr/bin nach /bin kopiert, dort suche ich auch noch eine bessere Alternative.


Quellcode:
# Check for filesystem consistency
    onintr -
    ((sleep 8; kill -9 `ps -e | grep dd | awk '{print $2}'`)&) > &/dev/null    
    echo -n "Skip filesystem check? (y/n)"
    set a = `stty -g`
    stty -echo raw
    onintr goon
    (dd bs=1 count=1 >/erase_me) > &/dev/null
goon:
    onintr
    stty $a    
    set b = `cat /erase_me`
    rm /erase_me > &/dev/null
    sync
    if ($b != 'y') then
        echo "\n\n"
        /etc/fsck -y /dev/root
        /etc/fsck -y /dev/rusr /dev/rtmp
        /etc/mount /dev/tmp /tmp >& /dev/null
        /etc/fsck -y -t /tmp/scratch /dev/rz
        /etc/umount /dev/tmp >& /dev/null
    else
        echo "\n\nFSCK aborted\n"
    endif



MfG
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
25.07.2015, 20:17 Uhr
Olli

Avatar von Olli

Ich habe unter FreeBSD als Shell eine tcsh. Scripting aber wenn eigentlich immer mit ner bourne Shell - ausser halt meine .cshrc

Erklär mal was du generell vor hast.

Was mir generell einfällt - ohne das ich auf Anhieb schnalle was du überhaupt vor hast:
Es könnte sein, das dein "grep dd" 2 Zeilen liefert, nämlich die "dd zeile" und die "grep dd" Zeile - Anstelle von grep kannst du auch mit awk filtern

awk '/dd bs[=]/ {print $2}'

Die eckigen Klammern habe ich nur gewählt um nicht wiederum den awk Prozess zu finden.

Wenn du auf awk verzichten willst, schau dir mal "cut -d.... -f...." an. Ich glaube, das es bei WEGA standardmäßig unter /bin liegt.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 25.07.2015 um 20:18 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
26.07.2015, 10:17 Uhr
kaiOr

Avatar von kaiOr

Danke, Dein Hinweis brachte mich dazu das Ergebnis testhalber in eine Datei umzuleiten. Ich hatte nach Änderung von "ps -eaf" auf "ps -e" (läuft schneller) mit awk die komplett falsche Spalte gefiltert. "cut" liegt leider auch nur unter /usr/bin.

Jetzt tut es soweit:

Quellcode:
# Check for filesystem consistency
    onintr -
    if (! -e /bin/awk) then
        /etc/mount /dev/usr /usr >& /dev/null
        cp /usr/bin/awk /bin/awk >& /dev/null
        /etc/umount /dev/usr >& /dev/null
        chown bin /bin/awk >& /dev/null
    endif    
    ((sleep 8; kill -2 `ps -e | /bin/awk '/dd/ {print $1}'`)&) >& /dev/null    
    set a = `stty -g`    
    echo -n "Skip filesystem check? (y/n)"
    stty -echo raw
    onintr goon
    (dd of=/erase_me bs=1 count=1) >& /dev/null
goon:
    onintr -
    stty $a    
    echo
    set b = `cat /erase_me`
    rm /erase_me >& /dev/null
    sync
    onintr
    if ($b != 'y') then
        /etc/fsck -y /dev/root
        /etc/fsck -y /dev/rusr /dev/rtmp
        /etc/mount /dev/tmp /tmp >& /dev/null
        /etc/fsck -y -t /tmp/scratch /dev/rz
        /etc/umount /dev/tmp >& /dev/null
    else
        echo "\nFSCK aborted\n"
    endif


Zweck der Verrenkungen: Das Skript soll auf Tastendruck (ohne Bestätigung) reagieren und binnen weniger Sekunden fortfahren, falls kein Tastendruck erfolgt.

MfG

Dieser Beitrag wurde am 26.07.2015 um 14:50 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
26.07.2015, 14:12 Uhr
Olli

Avatar von Olli

- Bei dd würde mit of= anstatt > arbeiten
- grep und awk würde ich wie in Posting #2 aggregieren und nur noch awk verwenden

Ansonsten.... unter ner bourn shell könnte man auf awk verzeichten durch set:


Quellcode:

$ ps auxww|head -1
USER       PID  %CPU %MEM     VSZ    RSS TT  STAT STARTED         TIME COMMAND
$ set `ps auxww|head -1`
$ echo $1
USER
$



Müsste man jetzt nochmal grübeln wie das mit der C-Shell ginge...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
26.07.2015, 14:57 Uhr
kaiOr

Avatar von kaiOr


Zitat:
Olli schrieb
- Bei dd würde mit of= anstatt > arbeiten
- grep und awk würde ich wie in Posting #2 aggregieren und nur noch awk verwenden


Ok, hab's im letzten Post gedreht. Ursprünglich wollte ich mit dd direkt eine Variable setzen und keine Datei, aber dann ließ sich die "records in & records out" Meldung nicht unterdrücken.

Dieser Beitrag wurde am 26.07.2015 um 15:03 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
26.07.2015, 21:41 Uhr
kaiOr

Avatar von kaiOr



EDIT: EDIT: EDIT:

Quellcode:
# Check for filesystem consistency
    onintr -
    ((sleep 8; setenv c "`ps -e | grep dd`"; kill -2 `(echo 'foreach i ($c)\necho $i\nbreak\nend') | csh`) &) >& /dev/null    
    set a = `stty -g`    
    echo -n "Skip filesystem check? (y/n)"
    stty -echo raw
    onintr goon
    set b = `dd bs=1 count=1 |& tr -cd 'y'`
goon:
    onintr -
    stty $a    
    echo
    onintr
    if ($b != 'y') then
        /etc/fsck -y /dev/root
        /etc/fsck -y /dev/rusr /dev/rtmp
        /etc/mount /dev/tmp /tmp >& /dev/null
        /etc/fsck -y -t /tmp/scratch /dev/rz
        /etc/umount /dev/tmp >& /dev/null
    else
        echo "\nFSCK aborted\n"
    endif


Dieser Beitrag wurde am 27.07.2015 um 17:15 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
26.07.2015, 22:12 Uhr
Olli

Avatar von Olli

Na komm, auf die Idee mit dem durchloopen bist du doch erst durch meinen "set" Hinweis gekommen :p
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
27.07.2015, 17:01 Uhr
kaiOr

Avatar von kaiOr

Aber absolut!

Da eigentlich nur die Taste [y] interessiert konnte ich das Erstellen der temporären Datei nun auch noch umgehen. Ich denke so kann das bleiben.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Sonstiges ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek