编程知识 cdmana.com

Utilisation de / dev / NULL dans les scripts Shell

C'est ma participation11Le défi du mois de juin11Oh, mon Dieu.

/dev/null C'est un fichier de périphérique spécial,Il rejette toutes les données qui y sont écrites Vous pouvez le mettre Comme un trou noir, C'est l'équivalent de n'écrire que des fichiers, Tout ce qui y est écrit disparaîtra, Les tentatives de lecture ou de sortie ne donnent aucun résultat,Encore une fois,/dev/null Très utile en ligne de commande et dans les scripts

Objet

/dev/null Habituellement utilisé pour éliminer les flux de sortie indésirables,Ou comme fichier vide pour le flux d'entrée,Ces opérations sont généralement effectuées par redirection,Toutes les données que vous voulez jeter peuvent y être écrites

Jeter la sortie standard

C'est écrit.shellAu moment du script,Je veux juste exécuter la logique suivante par le résultat de la commande,Plutôt que d'avoir un tas de résultats intermédiaires pendant l'exécution de la commande,À ce stade, vous pouvez écrire toutes les entrées pendant l'exécution de la commande /dev/null

Existant a.sh Script,Sa fonction est de déterminer si les commandes système entrantes existent,Le contenu du script est le suivant:

  1 #!/bin/bash
  2 
  3 command -v $1
  4 
  5 if [[ $? -eq 0 ]]; then
  6    echo "command $1 exist..."
  7 else
  8    echo "command $1 not exist..."
  9 fi
Copier le Code

Mise en œuvre ./a.sh top Les ordres,Les résultats sont les suivants

[tt@ecs-centos-7 dev_test]$ ./a.sh top
/bin/top
command top exist...
Copier le Code

Description: command -v Nom de la commande Est de trouver si la commande avec le nom de commande spécifié existe,Si elle existe,Exporter le chemin vers le nom de commande spécifié,Sinon,Pas de sortie

$? Représente le résultat de l'exécution de la commande précédente, 0 Indique le succès,Autres indications d'échec

Le résultat d'exécution du script est sorti en premier top Le chemin de la commande,Et puis la sortietopJournal de présence de la commande

Prends ça. command -v $1Résultats redirigés vers /dev/null Peut être masqué topSortie du chemin de commande,Après ajustementa.sh Il se lit comme suit:

  1 #!/bin/bash
  2 
  3 command -v $1 >/dev/null
  4 
  5 if [[ $? -eq 0 ]]; then
  6    echo "command $1 exist..."
  7 else
  8    echo "command $1 not exist..."
  9 fi
Copier le Code

Encore une fois ./a.sh top,Les résultats sont les suivants:

[tt@ecs-centos-7 dev_test]$ ./a.sh top
command top exist...
[tt@ecs-centos-7 dev_test]$ 
Copier le Code

Les résultats de l'exécution montrent que,Prends ça. command -v $1 Résultats intermédiaires redirigés vers /dev/null Après,Il n'y aura plus de sortietopLe chemin de la commande est

Et,Le résultat d'exécution du script modifié est le même que le résultat original

Jeter la sortie d'erreur standard

InshellDans le script,Quand vous supprimez un fichier,Il faut d'abord déterminer si le fichier existe,Avant d'effectuer l'opération de suppression,Sinon, une erreur est sortie lors de la suppression, Le contenu général du script de suppression de fichier est le suivant:

  1 #!/bin/bash
  2 
  3 if [ -f $1 ]; then
  4    rm $1
  5 fi
Copier le Code

La sortie de la commande delete peut être redirigée vers /dev/null Pour éviter la sortie de messages d'erreur, En même temps, il n'est pas nécessaire de déterminer si le document existe, Le contenu du script de suppression ajusté est le suivant:

  1 #!/bin/bash
  2 
  3 rm $1 >/dev/null 2>$1
Copier le Code

Exécuter les commandes séparément ./d.sh t1.txt./d.sh t2.txt ,Les résultats sont les suivants::

[tt@ecs-centos-7 dev_test]$ ls t*.txt
t1.txt
[tt@ecs-centos-7 dev_test]$ ./d.sh t1.txt
[tt@ecs-centos-7 dev_test]$ ./d.sh t2.txt
[tt@ecs-centos-7 dev_test]$ ls t*.txt
ls: Impossible d'accédert*.txt: Il n'y a ni fichier ni répertoire
Copier le Code

t1.txt Le fichier est dans le répertoire courant,t2.txt N'existe pas,Les résultats de l'exécution montrent que,Qu'il s'agisse de supprimer un fichier existant ou non, il n'y aura pas d'informations de sortie d'erreur

Vider le contenu du fichier

Il y a plusieurs façons de vider le contenu d'un fichier,Voici une utilisation /dev/null Comment vider le contenu du fichier,Voici des exemples précis:

[tt@ecs-centos-7 dev_test]$ cat t.txt 
123456
[tt@ecs-centos-7 dev_test]$ cat /dev/null > t.txt 
[tt@ecs-centos-7 dev_test]$ cat t.txt 
Copier le Code

Traitement des journaux

Dans le script,Pour faciliter la mise en service,La logique de l'impression des journaux est souvent ajoutée,Parfois, il y a plus de journaux de débogage,Une fois le script testé,Ces journaux de débogage peuvent être supprimés ou commentés

Voici un petit conseil,Ni supprimer ni annoter le journal,Ces journaux de débogage ne sont pas encore sortis lors de l'exécution simultanée du script

Par exemple,: Il y a un fichier journal dans le répertoire courant log.txt,Le journal de débogage du script sera echo " this is debug log" >> log.txt Écrit dans ce fichier sous la forme de

Maintenant que le test de fonction de script est passé,Le journal de débogage n'a pas besoin d'être écritlog.txtC'est

C'est possible.:Le script original reste inchangé,Supprimer d'abord localement log.txt,Et ensuite exécuter ln -s /dev/null ./log.txt Les ordres,La commande crée un log.txt À /dev/nulllConnexion souple pour,Il y aura des écrits plus tard log.txt En fait, tout le contenu de /dev/null ,Et écrire /dev/null Tout le contenu de

Si vous devez déboguer le script plus tard,Supprimer le lien suffit

版权声明
本文为[Le développement de Linux]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125174158839v.html

Scroll to Top