Utilisation de sed

Bonjour,

Je compile moi-même les derniers drivers Nvidia en suivant ce guide :
https://wiki.debian.org/NvidiaGraphicsDrivers#Building_newer_releases_from_SVN

A la différence qu’à la place d’utiliser svn-builpackage, j’utilise pbuilder. Bref, la question n’est pas là.

Comme vous pouvez le voir par exemple sur la commande svn suivante :
svn co svn://anonscm.debian.org/pkg-nvidia/packages/nvidia-graphics-drivers/branches/318

J’ai remplacé “318” par $1 pour que je puisse passer en argument la version du driver Nvidia lorsque je lance mon script. La commande citée au dessus télécharge le dossier “debian” mis à jour par les mainteneurs Debian du driver. Le hic, c’est que la version du driver dans “debian/changelog” n’est pas “318”, “318.13-1” mais “318.13~svn1” -> les paquets nvidia auront ce nom de version.

En argument du script, je donnerais évidemment “318.13~svn1” mais vu que la commande svn est seulement “318”, comment transformer “318.13~svn1” en “318” via la commande sed ?

Merci.
Babaoreum

PS : Gros résumé de part il vrai mais c’est pour remettre dans le contexte :slight_smile:

salut,

comment récupères-tu l’information du fichier ?
si le fichier ne contient qu’une seule ligne, pas besoin de sed :

var="${var%%.*}"````

Tu veux dire quoi par récupérer l’information du fichier ?

Je vais moi-même sur le svn et vais lire le “debian/changelog”. Du coup, l’argument que je mets lorsque je lance le script est écrit manuellement.

ne peux-tu pas faire une requête svn (là, je ne sais pas de quoi je parle : je ne connais pas svn :frowning: )de sorte que le contenu du fichier s’affiche ? afin d’automatiser au maximum.

le remplacement de paramètres ne changera pas, au lieu de remplacer une variable assignée par read, ce sera un paramètre positionnel. donc, toujours pas besoin de sed.

SVN c’est comme GIT en faite, ce n’est juste qu’un dépôt en ligne.
Lors de la requête nommé plus haut, elle télécharge donc le dossier “debian” qui contient tout le nécessaire pour construire le paquet .deb.

Et concernant le fichier “debian/changelog”, il ressemble à ça :
https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/branches/378/debian/changelog?revision=7181&view=markup

même si le fichier contient plusieurs lignes, l’information pertinente est sur la première ligne, donc la commande que j’ai donnée dans mon premier message est correcte à peu de chose près :wink: :

bla
bla' > changelog #pour la demonstration
read release < ./changelog
release="${release#*\(}" 
release="${release%.*}" 
echo "$release"
378````

Le hic dans tout cela, c’est que le fichier changelog, je ne l’ai pas au lancement du script donc je ne peux utiliser tes commandes :stuck_out_tongue:

C’est en transformant “378.13~svn1-1” en “378” que le dossier “debian” qui contient le “changelog” est téléchargé :wink:

C’est pour cela que je disais que l’argument du script est écrit manuellement.

Schroedinger ! sors de cet œuf et/ou de cette poule !

soit tu donnes le paramètre à la main, donc tu le connais, alors tu l’écris comme tu veux.
soit tu le récupères depuis le fichier.

mais tu ne peux pas demander de “convertir” avant, un paramètre que tu ne connais pas encore.

trop d’Oreum, pas assez de Baba ?

Depuis le début je te dis que je connais et que je te donne l’argument du script à la main hein …

[quote=“BabaOreum, post:9, topic:72828”]
Depuis le début je te dis que je connais et que je te donne l’argument du script à la main
[/quote]alors, où est le problème ?

[quote=“BabaOreum, post:1, topic:72828”]
la version du driver dans “debian/changelog” n’est pas “318”, “318.13-1” mais “318.13~svn1”
[/quote]ici, tu récupères bien l’information dans le fichier changelog, n’est-ce pas ?
mais comment peux-tu lire dans ce fichier ? tu l’as préalablement téléchargé ?

[quote=“BabaOreum, post:1, topic:72828”]
je donnerais évidemment “318.13~svn1” mais vu que la commande svn est seulement “318”
[/quote]pourquoi “évidemment” ?
pourquoi donner une autre information que celle attendue ?
puisque c’est toi qui commande à tes doigts, tu arrêtes la frappe juste avant le point. :smile:

sinon, reprends proprement, sans digressions, étape par étape, l’une après l’autre, les opérations que tu effectues.

Je vais lire le fichier “debian/changelog” directement sur Internet pour récupérer la version exacte qui sera donnée aux paquets .deb :
https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/branches/378/debian/changelog?view=markup

Car mon script ne fait pas que construire les paquets x86-64 et i386, il les regroupe ensuite dans un seul et même dossier (car quand tu exécutes pbuilder pour construire les paquets dans ces deux versions, les .deb finaux dans dans deux dossiers distinct en fonction de leur version)

Et les paquets debian une fois fini sont de ce type :
libegl1-glvnd-nvidia_378.13-1~svn1_amd64.deb

Donc pour faire le déplacement des .deb dont j’ai besoin vers le répertoire final sans être à chaque fois obligé de modifier chaque paquet avec un nouveau numéro, ça donne ça :
libegl1-glvnd-nvidia_$1_amd64.deb

Au final, j’ai trouvé la solution à mon problème. Ce n’était pas un sed que je devais faire mais un cut.
J’ai finalisé mon script, je l’attache pour que tu comprennes ou je voulais en venir :smiley:
nvidia_package_install.txt (2,6 Ko)

on en revient donc à la proposition faite il y a 18 heures : cut est inutile. le shell sait faire ça.

je vois dans ton script qu’il y beaucoup de noms communs aux deux cp.
tu pourrais faire deux tableaux :

libegl1-glvnd-nvidia_
libegl-nvidia0_
libgl1-glvnd-nvidia-glx_
libgl1-nvidia-glvnd-glx_
libgldispatch0-nvidia_
libgles1-glvnd-nvidia_
libgles2-glvnd-nvidia_
libgles-nvidia1_
libgles-nvidia2_
libglx0-glvnd-nvidia_
libglx-nvidia0_
libnvidia-cfg1_
libnvidia-eglcore_
libnvidia-egl-wayland1_
libnvidia-glcore_
libopengl0-glvnd-nvidia_
nvidia-driver-libs_
nvidia-egl-icd_
nvidia-egl-wayland-common_
nvidia-egl-wayland-icd_
nvidia-vulkan-icd_
)
amd=(
libnvidia-ml1_
nvidia-alternative_
nvidia-driver_
nvidia-driver-bin_
nvidia-egl-common_
nvidia-kernel-dkms_
nvidia-kernel-support_
nvidia-legacy-check_
nvidia-vdpau-driver_
nvidia-vulkan-common_
xserver-xorg-video-nvidia_
)
cd "/media/Autres/pbuilder/testing-i386/result/"
cp -t "/media/Autres/Build/Nvidia-driver/paquets/$driver_version" "${communs[@]/%_/$driver_version}" 
cd /media/Autres/pbuilder/testing-amd64/result/"
cp -t "/media/Autres/Build/Nvidia-driver/paquets/$driver_version" "${communs[@]/%_/$driver_version}"  "${amd[@]/%_/$driver_version}"````

Merci Watael, je teste cela et je te dis ce qu’il en est :wink: