The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
[C] problème avec fgets SIGINT singlal! hurricane86 High Level Programming 1 01-02-2009 12:04 PM
variable passant de bash à partir de perl script bash arsidh De programmation et de script Shell 10 06-04-2008 01:25 PM
Problème avec la manipulation SIGINT JamesGoh High Level Programming 3 02-24-2008 10:39 PM
Ne peut pas attraper SIGINT rupture de série alors que se produit GZZ High Level Programming 13 11-23-2007 08:06 AM
AIX intercepter les appels système ramkumar.pvs AIX 2 09-29-2006 03:17 AM

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 07-01-2009
Starcast Starcast is offline
Registered User
  
 

Date d'inscription: janvier 2009
Lieu: Minneapolis, MN
Messages: 13
L'interception SIGINT dans un script bash

J'ai écrit un script bash qui permet de capturer des vidéos avec DVgrab. En raison de la nature des bandes que je suis la numérisation, parfois, je veux arrêter la capture avant la date fixée pour que je DVgrab. Lorsque c'est le cas, je presse Ctrl-c et DVgrab sorties proprement, mon problème est qu'il ya des informations supplémentaires que le script affiche dans le terminal avec des' echo 'lorsque le script s'exécute jusqu'à ce que l'ensemble du temps. Quand je Ctrl-c aucune de ces informations ne tirages ...

Est-il possible d'intercepter le SIGINT (je pense que c'est ce que je veux, mais je peux me tromper) et il fonctionne exactement comme il le fait par défaut, mais en outre l'écho de quelques variables dans le terminal?

De préférence, je voudrais juste faire cela dans mon script ... et pas la manière Ctrl-c fonctions système.

Vous ne savez pas si c'est important, mais sur la base de ma lecture avant à ce poste je ne savais pas, mais je exécuter ce script dans un terminal virtuel à un gnome sur Ubuntu (8,10) machine Linux

Le peu que je voulais ajouter lorsque Ctrl-c est pressé ressemble à ceci:

Code:
echo -e "\E[31;40m++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "+               Warning - Capture Ended Early                           +"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo -e "\E[30;47m++ Format: $FORMAT    ++ Min Remaing on $destination : $minremain    "
echo "++ Deck: $deck_number          ++ Customer: $customer      " 
echo "++ Rec Time: $tape_length  ++ Tape: $tapename"
Merci d'avance!
-Starcast
  #2 (permalink)  
Old 07-01-2009
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Lieu: NM
Posts: 5,759
Code:
#!/bin/bash
trap 'echo "Control-C disabled." ' 2
... your code here.
  #3 (permalink)  
Old 07-01-2009
Starcast Starcast is offline
Registered User
  
 

Date d'inscription: janvier 2009
Lieu: Minneapolis, MN
Messages: 13
J'ai fini par faire ressembler à ça, mais vous avez donné ce dont j'avais besoin pour y arriver, merci.

Code:
#!/bin/bash
trap 'echo -e "\E[31;40m\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n
+                   WARNING - Early Exit                         +\n
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\E[30;47m\n
++ Format: $FORMAT    ++ Min Remaing on $destination : $minremain    \n
++ Deck: $deck_number          ++ Customer: $customer      \n
++ Rec Time: $tape_length  ++ Tape: $tapename"' 0
-Starcast
  #4 (permalink)  
Old 07-01-2009
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Lieu: NM
Posts: 5,759
Code:
trap "some command goes here" 0
exécute le script shell de sortie
  #5 (permalink)  
Old 07-01-2009
Starcast Starcast is offline
Registered User
  
 

Date d'inscription: janvier 2009
Lieu: Minneapolis, MN
Messages: 13
Oui, je vois que .... Je viens de terminer une bande de 2 heures et mon avertissement poped après il a couru pour l'ensemble de temps alloué et sorti normalement ...

J'ai changé le -2 - à -0 - juste deviner et je pensais que c'était de travail .... (Je ne peux pas pour la vie de me trouver une liste de «piège options" en expliquant ce que chaque numéro se faire?) Je suis passé parce que le -2 - option n'est pas la fin du script? Elle imprime inséré mon code, mais ne pas faire revenir l'invite, ça continue le script?

---------- Post mis à jour à 04:50 PM ---------- Mise à jour précédente a été, à 04:27 PM ----------

Ok, j'ai parlé trop vite. le -2 - option ne DVgrab arrêter (il n'a pas quitter le script quand je presse Ctrl-c avant le point dans le script quand DVgrab commence .... ce qui est bien, sauf, j'ai aussi une fonction qui s'exécute dans un compte à rebours mon script, et ce à rebours se poursuit après un Ctrl-c ... Le compte à rebours fonction ressemble à ceci:

Code:
function countdown
{
        local OLD_IFS="${IFS}"
        IFS=":"
        local ARR=( $1 )
        local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START

        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%02d:%02d:%02d" \
                        $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        IFS="${OLD_IFS}"
        echo "        "
}
Existe-t-il quelque chose que je pourrais inclure dans mon code-piège qui tuent de cette fonction et d'imprimer mon avertissement?

Merci
-Starcast
  #6 (permalink)  
Old 07-06-2009
Starcast Starcast is offline
Registered User
  
 

Date d'inscription: janvier 2009
Lieu: Minneapolis, MN
Messages: 13
Ok, donc je me suis tourné sur mon cerveau et trouvé la solution ... Je déteste quand je me faire des captures paresseuse ici ...

Pour toute personne suivant le fil, ce n'est ce que j'ai décrit besoin
Code:
trap 'CUR=$END 
sleep 1 
echo -e "\E[31;40m\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\n+                   WARNING - Early Exit                         +
\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\E[30;47m\n++ Format: $FORMAT    ++ Min Remaing on $destination : $minremain    
\n++ Deck: $deck_number          ++ Customer: $customer      
\n++ Rec Time: $tape_length  ++ Tape: $tapename"
exit ' 2
Oh, j'ai ajouté le "sommeil" pour tenir compte de la sortie de l'info DVgrab qu'il affiche ... sinon, je recevais quelques lignes imprimées après l'avertissement ...

Et j'ai ajouté «sortie» à la fin afin que le script ne continue pas après la mise à mort le compte à rebours

-Starcast
Reply

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 10:32 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0