2010-06-13 4 views
0

J'ai une commande par ex. ls-l> file.txt Lorsque l'espace sur mon disque est insuffisant, la commande ci-dessus s'arrête juste en attendant que quelque chose se produise. Est-ce que quelqu'un sait d'un code que je pourrais écrire me permettant d'afficher un message sur le manque d'espace sur mon disque? Par exemple. Puis-je utiliser IPC ou avez-vous d'autres idées? Merci d'avance.Bash: redirection s'arrête

Répondre

0

Vous pouvez utiliser la commande df pour déterminer la quantité d'espace libre sur le lecteur et ne pas démarrer votre traitement s'il y a moins de 5 M d'espace libre par exemple. Vous pouvez également vérifier l'espace disponible dans votre programme interne et écrire un message d'avertissement dans le STDERR.

+0

Malheureusement, la commande devra toujours s'exécuter. Je vais devoir faire face à la question du blocage. Voulez-vous dire que je vais devoir écrire une sorte de boucle qui va toujours calculer l'espace libre en utilisant df et quand il dépasse une certaine limite, je montre un message? Mais n'y a-t-il pas un moyen plus efficace de vérifier si le processus s'est arrêté au lieu d'avoir une boucle. – user365828

0

Sortie de commande de tuyau via un autre programme qui va intercepter les erreurs d'écriture (par exemple ENOSPC), imprimer des diagnostics et échouer si rien d'autre ne peut être fait.

Ce programme peut être aussi simple que cat:

foobar | cat > file.txt 

cat rapportera erreur et mourir, et foobar recevront SIGPIPE avec l'action par défaut de mourir ainsi.

+0

Pourriez-vous s'il vous plaît fournir plus d'informations? – user365828

+0

Quel est le comportement souhaité lorsque l'application manque d'espace disque? Échouer avec certains diagnostics au lieu d'attendre indéfiniment, continuer à écrire comme dans un tampon circulaire, quelque chose d'autre? – rkhayrov

+0

Lorsque l'application a rempli le disque, il n'est pas nécessaire d'attendre indéfiniment pour plus d'espace disponible, juste avertir en affichant "manque d'espace disque" et arrêter à partir de là ou quitter le code. – user365828