Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/01/2021, à 12:00

Zococo

[Résolu]<<EOF > fichier - Comment cela peut-il fonctionner ?

Bonjour,

J'ai trouvé sur un forum une suite de commandes shell que je comprends pas.
Il s'agit d'extraire des informations d'un fichier texte, je comprends assez bien :

  • la première ligne (que je laisse pour info) télécharge le fichier

  • la deuxième extrait du zip le fichier update-binary

  • c'est la troisième ligne que je comprends pas : elle est supposée extraire une suite de caractères (une signature) mais je le sentiment que ça ne peut pas fonctionner car il manque le fichier d'origine. Les infos doivent être extraites du fichier update-binary, mais ce fichier n'est pas mentionné dans la commande "cat <<EOF > update-payload-key.pub.pem" donc je ne vois pas comment cela peut fonctionner. Et pourtant ça marche ??

J'aimerais bien savoir quelle est cette subtilité d'écriture que je ne connais pas et qui fait qu'il est possible d'agir sur un fichier créé par la commande précédente. Je crois comprendre que la 3ème ligne ne se termine pas par le retour chariot et que jusqu'à EOF on reste dans la même mais il me manque des éléments pour bien comprendre.
Voici les commandes shell :

$ wget https://download.lineage.microg.org/extra/lineageos-for-microg-keys-migration.zip
$ unzip -p lineageos-for-microg-keys-migration.zip META-INF/com/google/android/update-binary > update-binary
$ cat <<EOF > update-payload-key.pub.pem
> -----BEGIN PUBLIC KEY-----
> $(grep release_key= update-binary | cut -d '"' -f 2 | fold -w 64)
> -----END PUBLIC KEY-----
> EOF
$

et le post d'origine : lien
J'espère que je suis clair. J'aimerais vraiment savoir comment la 3ème ligne peut fonctionner. Je pensais que ça ne marcherait pas mais finalement en copiant "-----BEGIN PUBLIC KEY-----" puis toutes les autres lignes jusqu'à EOF ça a l'air de fonctionner.
Un très savant et très pédagogue usager du forum saurait-il m'expliquer ?
Par avance un grand merci.

Dernière modification par Zococo (Le 16/01/2021, à 21:10)


Ubuntu 23.04 (64 bits) - Gigabyte B250M-DS3H / Core i5-7600K (Kaby lake) - Microsoft surface Go 3

Hors ligne

#2 Le 16/01/2021, à 12:20

abelthorne

Re : [Résolu]<<EOF > fichier - Comment cela peut-il fonctionner ?

C'est ce qu'on appelle un Here Document, ça permet de traiter une suite de lignes après la commande jusqu'à ce qu'on tombe sur un délimiteur qu'on définit. Plus d'infos là : https://fr.wikipedia.org/wiki/Here_document.

En gros, à partir du moment où on met << ça signifie qu'on va lire les lignes suivantes jusqu'à tomber sur ce qu'on met juste après le <<. En l'occurrence, EOF, qui est juste un acronyme usuel pour End Of File, mais ça pourrait être n'importe quoi d'autre.

Donc, ta troisième commande va afficher (cat) le contenu des lignes suivantes (<<) jusqu'à tomber sur EOF et va rediriger (>) ces lignes affichées dans un fichier update-payload-key.pub.pem.

Tu peux aussi créer le fichier update-payload-key.pub.pem manuellement et coller dedans le contenu voulu mais attention à ne pas mettre le EOF dedans, il faut bien comprendre que c'est une borne pour la commande et pas un élément du contenu.

Hors ligne

#3 Le 16/01/2021, à 15:28

Watael

Re : [Résolu]<<EOF > fichier - Comment cela peut-il fonctionner ?

et va rediriger

dans les faits, la redirection est effectuée avant l'exécution de la commande.

c'est pourquoi on ne peut pas faire une redirection vers le fichier qu'on veut traiter : la redirection ayant lieu avant, le fichier est écrasé, et le traitement se fait sur un fichier vide. sad

Dernière modification par Watael (Le 16/01/2021, à 15:29)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#4 Le 16/01/2021, à 21:10

Zococo

Re : [Résolu]<<EOF > fichier - Comment cela peut-il fonctionner ?

Bonsoir,
Un grand merci.
Je ne connaissais pas du tout.
J'avais bien compris que je pouvais créer le fichier payload manuellement et c'est le délimiteur qui me posait problème. Je pensais que c'était la fin du fichier d'origine.
Je me coucherai moins bête ce soir.
Un grand merci encore et une bonne soirée ... confinée !


Ubuntu 23.04 (64 bits) - Gigabyte B250M-DS3H / Core i5-7600K (Kaby lake) - Microsoft surface Go 3

Hors ligne