GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Linux exec avec exemples

Présentation

Le Linux exec La commande exécute une commande Shell sans créer de nouveau processus. Au lieu de cela, il remplace l'opération Shell actuellement ouverte. Selon l'utilisation de la commande, exec a des comportements et des cas d'utilisation différents.

Cet article montre comment utiliser le exec commande sous Linux.

Prérequis

  • Accès à la ligne de commande/au terminal en tant que sudo.
  • Compréhension de base des commandes de terminal Linux (utilisez notre aide-mémoire sur les commandes Linux).
  • Un éditeur de texte Linux tel que nano.

Syntaxe de la commande Linux exec

Le exec la syntaxe de la commande est :

exec [options] [command [arguments]] [redirection]

La commande se comporte différemment selon le nombre d'arguments :

  • Si un argument est présent, le exec La commande remplace le shell actuel par le programme exécuté. Dans un script Bash, toutes les commandes après ne sont pas exécutées .
  • Si aucun argument de commande n'est présent, toutes les redirections se produisent dans le shell actuel.

Le exec La commande ne revient jamais au processus d'origine, sauf en cas d'erreur ou si la commande s'exécute dans un sous-shell.

Options de la commande Linux exec

Vous trouverez ci-dessous une brève explication de tous les exec option :

Option Description
-c Exécute la commande dans un environnement vide.
-l Passe un tiret (- ) comme argument zéro.
-a [name] Passe un [name] comme argument zéro.

Continuez à lire pour voir comment exec fonctionne à travers des exemples.

Exemples de commande Linux exec

Les exemples ci-dessous illustrent le comportement du exec commande dans le terminal et via des scripts Bash.

Utilisation de base (remplacement de processus)

Pour voir comment exec fonctionne, procédez comme suit :

1. Ouvrez le terminal et répertoriez les processus en cours :

ps

La sortie montre le shell Bash en cours d'exécution et le ps commande. Le shell Bash a un PID unique.

2. Pour confirmer, vérifiez l'ID de processus actuel avec :

echo $$

Le PID est le même que la sortie du ps commande, indiquant qu'il s'agit du processus Bash en cours d'exécution.

3. Maintenant, exécutez exec et passez la commande sleep pendant cent secondes :

exec sleep 100

Le sleep la commande attend 100 secondes.

4. Dans un autre onglet de terminal, répertoriez tous les processus en cours d'exécution et grep le sleep commande :

ps -ae | grep sleep

Le PID du processus est le même que le PID du shell Bash, indiquant le exec La commande a remplacé le processus du shell Bash.

La session Bash (onglet terminal) se ferme lorsque les cent secondes sont écoulées et que le processus se termine.

Remplacer la session Shell actuelle

Utilisez le exec commande pour remplacer la session shell actuelle :

1. Vérifiez le PID actuel du shell :

echo $$

2. Utilisez exec pour passer au Bourne Shell :

exec sh

3. Dans un autre onglet, vérifiez le PID du processus Bourne Shell :

ps -ae | grep "\bsh\b"

Remarque : Le \b en grep est Regex pour la correspondance des limites de mots, permettant une correspondance exacte de sh dans la sortie. Apprenez-en plus dans notre tutoriel Grep Regex.

La commande remplace le processus Bash. Quitter le Bourne Shell ferme complètement la session du terminal.

Appels de programme avec exec dans les scripts Bash

Pour voir comment exec fonctionne dans les scripts Bash, procédez comme suit :

1. Ouvrez un éditeur de texte, tel que Nano, et créez un fichier de script :

nano [script name]

2. Collez le code suivant :

#!/bin/bash

while true
do
        echo "1. Update "
        echo "2. Upgrade "
        echo "3. Exit"
   read Input
   case "$Input" in
        1) exec sudo apt update ;;
        2) exec sudo apt upgrade  ;;
        3) break
   esac
done

Le script effectue les opérations suivantes :

  • Ligne 3 crée un while infini boucle.
  • Lignes 5 à 7 imprimer les trois options possibles.
  • Ligne 8 lit l'entrée de l'utilisateur dans la variable $Input .
  • Ligne 9 commence un case déclaration vérifiant l'entrée de l'utilisateur.
  • Lignes 10-11 exécuter le apt update ou apt upgrade commande à la place du shell actuel. Lorsque le processus de mise à jour ou de mise à niveau se termine, la session du terminal se ferme.
  • Ligne 12 utilise le break instruction pour quitter l'infini while boucle et termine le script. La session revient au shell actuel comme d'habitude.

3. Enregistrez le script et fermez Nano.

4. Exécutez le script Bash dans l'environnement actuel pour voir les résultats :

. [script name]

L'exécution du script avec la commande source applique le comportement du script au shell Bash actuel. Utilisez exec pour exécuter des scripts Bash dans d'autres programmes pour une sortie propre.

Journaliser les scripts Bash

Le exec La commande trouve une utilisation dans la manipulation des descripteurs de fichiers pour la journalisation des erreurs dans les scripts Bash. Les descripteurs de fichiers Linux par défaut sont :

  • stdin (0) - Standard dans
  • stdout (1) - Sortie standard
  • stderr (2) - Erreur standard

Utilisez le exec commande et redirige les descripteurs de fichier vers un fichier pour créer des journaux. Pour voir comment fonctionne la journalisation, suivez les étapes ci-dessous :

1. Créez un exemple de script Bash :

nano logging.sh

2. Collez le code dans le fichier :

#!/bin/bash

# Create test.log file
touch test.log

# Save test.log to log_file variable
log_file="test.log"

# Redirect stdin to $log_file
exec 1>>$log_file

# Redirect stderr to the same place as stdin
exec 2>&1

echo "This line is added to the log file"
echo "And any other lines after"
eho "This line has an error and is logged as stderr"

Le script redirige toutes les sorties de commande et les erreurs vers le même fichier (test.log ).

3. Enregistrez le script et fermez l'éditeur de texte.

4. Modifiez l'autorisation du script en exécutable :

chmod +x logging.sh

5. Exécutez le script :

./logging.sh

Le script ne génère aucun code. Au lieu de cela, tous les journaux de sortie dans le test.log fichier.

6. Utilisez la commande cat pour voir le test.log contenu du fichier :

cat test.log

Le fichier journal contient toutes les sorties standard et les messages d'erreur. Utilisez exec pour déboguer les scripts et consigner les entrées, les sorties ou les erreurs selon la situation.

Exécuter des scripts dans un environnement sain

Le -c option pour le exec commande crée un environnement propre. Pour démontrer, procédez comme suit dans le terminal :

1. Démarrez une nouvelle session shell Bash :

bash

2. Utilisez le printenv commande pour imprimer toutes les variables d'environnement dans le shell Bash actuel :

printenv

La commande imprime toutes les variables d'environnement pour la session actuelle du shell Bash.

3. Exécutez la même commande en utilisant exec avec le -c drapeau :

exec -c printenv

La commande printenv s'exécute dans un environnement propre et aucune variable n'est sortie sur la console. Utilisez le -c possibilité d'exécuter des scripts ou des commandes dans des environnements propres.

exec avec la commande find

La commande find sous Linux a le exec commande comme option pour exécuter une action sur le contenu découvert. Par exemple, la ligne ci-dessous exécute le chmod commande sur le find résultats de la commande :

sudo find ~ -name "test.log" -exec chmod +x '{}' \;

Le find la commande recherche dans le répertoire personnel (~ ) pour le test.log fichier et exécute le changement d'autorisation.

Conclusion

Après avoir suivi les exemples de ce tutoriel, vous devriez savoir comment utiliser le exec commande efficacement dans les scripts Bash.

Ensuite, découvrez comment exécuter une tâche automatiquement au redémarrage à l'aide de Crontab.


Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri Linux avec exemples

  3. Commande Linux Tee avec exemples

  4. Commande principale Linux avec exemples

  5. Commande JQ sous Linux avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

Commande Wait sous Linux avec des exemples

Commande d'exportation Linux avec exemples

Commande IP Linux avec exemples

Commande Linux exec avec exemples