Bash : Je ne comprends pas l'utilisation du chemin d'un fichier Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Bonjour,

Je suis pas du tout familier des scripts bash.

Voici le début d'un script que je tente d'écrire (je veux lancer un shc sur un fichier qui est demandé)

Code : Tout sélectionner

#!/bin/bash

# Demande à l'utilisateur le chemin du fichier à compiler avec shc
echo "Veuillez entrer le chemin du script à compiler :"
read chemin_fichier

# Se positionne dans le dossier contenant le script
chemin=$(dirname "$chemin_fichier")
cd "$chemin"


# Effectue la compilation avec shc
shc -v -f $chemin_fichier
Donc je souhaite saisir un fichier avec son chemin, me logger dans le dossier du fichier puis compiler le fichier avec shc mais...

Le résultat après lancement du script : deux erreurs liées au chemin du fichier :

Code : Tout sélectionner

Veuillez entrer le chemin du script à compiler :
'/home/blanco/Bureau/CHANTIER/essai.sh' 
/home/blanco/Bureau/CHANTIER/compile_moi.sh: ligne 9 : cd: $chemin: Aucun fichier ou dossier de ce type
shc: No such file or directory
Merci de m'aider à corriger et à comprendre mes erreurs.
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 271
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Enlève les " dans la ligne cd "$chemin" et ça ira mieux.

Amicalement.

Jean-Marie
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Salut,
Merci de te pencher sur mon pb.

Pas mieux, j'avais d'ailleurs déjà essayé.
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 271
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Alors, ce doit être les simple quotes (') que tu entres dans le chemin du fichier qui mettent le brin.

Amicalement.

Jean-Marie
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Effectivement, tu as raison. Sans ces simples quotes ça fonctionne bien.

Merci pour la solution.

En revanche comment éviter ces quotes quand on saisit à la souris dans le gestionnaire de fichiers Caja, le fichier par copier/coller ? Je peux passer par un éditeur de texte mais ça ne rend pas pratique le truc. Un autre moyen existe peut-être ?
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Bon j'ai trouvé comment enlever ces maudites quotes :

Code : Tout sélectionner

chemin=${chemin//\'/}
Mon code fonctionne maintenant, je vais le parfaire avec une compilation avec

Code : Tout sélectionner

gcc -g -o mon_executable.e  mon_script.x.c
On passera ainsi d'un script bash à un exécutable direct (extension en .e).
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 271
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Essaye plutôt ça :

Code : Tout sélectionner

#!/bin/bash

# Demande à l'utilisateur le chemin du fichier à compiler avec shc
echo "Veuillez entrer le chemin du script à compiler :"
read chemin_fichier

chemin_fichier=${chemin_fichier#\'}
chemin_fichier=${chemin_fichier%\'}

# Se positionne dans le dossier contenant le script
chemin=$(dirname "$chemin_fichier")
cd "$chemin"


# Effectue la compilation avec shc
shc -v -f $chemin_fichier
Amicalement.

Jean-Marie
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Oui ça enlève bien les quotes simples tout comme ce que je fais maintenant :

Code : Tout sélectionner

chemin=${chemin//\'/} 
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 271
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Oui..., sauf que mon code enlève "seulement" les quotes au début et à la fin, ce qui est EXACTEMENT ce que tu cherches et donc est plus propre.

Amicalement.

Jean-Marie
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

Bon mon script est au point, enfin il fonctionne. C'est peut-être du code pas mais qui a le mérite de faire ce qu'on lui demande :

Code : Tout sélectionner

#!/bin/bash
echo "Création d'un executable (extension .e) à partir d'un script bash de même nom."
echo "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
echo ""

# Demander à l'utilisateur le fichier et son chemin complet à compiler avec shc
echo "Veuillez entrer le chemin du script à compiler (peut se faire par copier/coller à la souris) :"
read chemin_fichier

chemin_fichier=${chemin_fichier//\'/}  # Remplace tous les ' par rien, s'il y en a.

# Se positionner dans le dossier contenant le script à compiler
chemin=$(dirname "$chemin_fichier")
chemin=${chemin//\'/} # Remplace tous les ' par rien, s'il y en a.
cd "$chemin"

# Effectuer la compilation avec shc
shc -v -f $chemin_fichier

# créer le fichier exécutable de même nom que le script mais avec l'extension .e
touch "${chemin_fichier%.*}.e"

 #compilation du code C obtenu avec shc 
 gcc *.c -o *.e

exit
Je ne l'ai testé que sur un script bash hyper simpliste. Des tests à venir sur des scripts plus gros.

Bon dimanche à tous et merci encore à Jean-Marie dit diesel, ici dans ce chouette forum.
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Blanco
Membre
Membre
Messages : 126
Inscription : 03 août 2023, 14:55
Status : Hors-ligne

@diesel :

excuse-moi je n'avais pas vu ta réponse à propos des quotes simples. Tu as raison de n'enlever que les quotes de début et de fin. C'est beaucoup plus propre.

Donc je reprends ton conseil dans mon code final :

Code : Tout sélectionner

#!/bin/bash
echo "Création d'un executable (extension .e) à partir d'un script bash de même nom."
echo "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°"
echo ""

# Demander à l'utilisateur le fichier et son chemin complet à compiler avec shc
echo "Veuillez entrer le chemin du script à compiler (peut se faire par copier/coller à la souris) :"
read chemin_fichier

# Enlèver les ' au début et à la fin du chemein s'il y en a.
chemin_fichier=${chemin_fichier#\'}
chemin_fichier=${chemin_fichier%\'}

# Se positionner dans le dossier contenant le script à compiler
chemin=$(dirname "$chemin_fichier")

# Enlèver les ' au début et à la fin du chemein s'il y en a.
chemin=${chemin#\'}
chemin=${chemin%\'}

cd "$chemin"

# Effectuer la compilation avec shc
shc -v -f $chemin_fichier

# créer le fichier exécutable de même nom que le script mais avec l'extension .e
touch "${chemin_fichier%.*}.e"

 #compilation du code c obtenu avec shc 
 gcc *.c -o *.e

exit
Mini PC Geekom i5 / 16 giga Bookworm + Mate

Fidèle à Debian depuis la version 8, après Ubuntu.
Répondre