2 votes

Execvp: Aucun fichier ou dossier de ce type

J'ai écrit un script ~/_bin/bcg pour appeler un autre script qui utilise gimp pour redimensionner une image aléatoire d'un répertoire, puis l'écrire dans un autre fichier. Mon script (toplevel) utilise ensuite hsetroot pour définir l'arrière-plan X sur cette image.

Le seul problème est que dès que j'appelle le script de l'autre personne avec exec !/_bin/aura, mon script s'arrête.

  1. Existe-t-il un moyen d'appeler des programmes et des scripts sans utiliser exec ?
  2. Existe-t-il un moyen d'empêcher exec de couper mon script ?

Si j'exécute les choses sans exec, j'obtiens :

execvp : Aucun fichier ou dossier de ce type

Je suppose que cela signifie que bash utilise implicitement un programme quelconque execvp pour analyser chaque ligne et que ce programme ne peut pas trouver (ou n'exécutera pas) ~/_bin/aura.

Je peux entrer chaque ligne dans le terminal et obtenir ce que je veux. Je ne peux juste pas tout mettre dans un script, mais c'est ce que je veux.

Que puis-je faire ?

#!/bin/bash
if [ -f ~/.bcg.bmp ]
then
        rm ~/.bcg.bmp
fi
~/_bin/aura "~/_wall";
hsetroot -center ~/.bcg.bmp

2voto

Bakuriu Points 592

Normalement, lorsque vous invoquez une commande dans un script bash, le shell attend que la commande se termine puis exécute la commande suivante. Lorsque vous utilisez exec, vous indiquez au shell de se remplacer lui-même par la commande qu'il est sur le point d'exécuter, c'est-à-dire qu'il n'y a plus de shell une fois que la commande démarre. Donc, lorsque la commande se termine, c'est comme si le script original se terminait également. Vous devez exécuter votre commande sans exec si vous voulez que le script continue à s'exécuter après la fin de la commande.

execvp: Aucun fichier ou dossier de ce type ne ressemble pas à un message d'erreur bash. Cela vient probablement du script aura, qui essaie d'exécuter quelque chose qui ne peut pas être trouvé dans votre chemin de recherche.

0voto

technosaurus Points 1042

Quand vous citez ~, il perd son comportement spécial, mais vous pouvez utiliser $HOME

#~/_bin/aura "~/_wall";
~/_bin/aura "$HOME/_wall";

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X