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 25/11/2012, à 01:07

YannUbuntu

Question bash (printf %x)

Bonjour

1)   [ "$(printf %x \'"$(cat "$var")")" = 1 ] est-il equivalent à [[ "$(printf %x \'"$(cat "$var")")" = 1 ]]   ?

2)  je comprends cat $var , mais que fait   printf %x \'"$(cat "$var")"  svp?


Merci pour votre aide!

Dernière modification par YannUbuntu (Le 26/11/2012, à 14:07)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#2 Le 25/11/2012, à 02:58

nesthib

Re : Question bash (printf %x)

Disons que var contienne un chemin vers un fichier, « $(cat "$var") » retourne le contenu du fichier, « printf %x \'… » permet d'afficher l'équivalent hexadécimal du contenu du fichier (« \'… » échappe les caractères de contrôle). Le test vérifie si le code hexadécimal est égal à 1 (comparaison de chaîne), soit un caractère de contrôle initialement égal à « Start of Heading » (^A).

Pour la différence entre « [ » et « [[ », le premier est moins évolué mais compatible sh (il s'agit en fait d'un alias pour « test ») alors que le second a plus de fonctionnalités et est interne à bash. Ici, ça ne devrait rien changer, pour plus détails voir la différence entre [ et [[.

ps. par curiosité, ça sort d'où ce truc ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 25/11/2012, à 11:50

Bousky

Re : Question bash (printf %x)

nesthib a écrit :

Pour la différence entre « [ » et « [[ », le premier est moins évolué mais compatible sh

Par contre si tu utilises « $(…) » tu perds la compatibilité avec sh, celui-ci ne comprends que « `…` » (aussi utilisable en bash bien entendu).


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#4 Le 25/11/2012, à 23:48

YannUbuntu

Re : Question bash (printf %x)

Merci pour vos réponses.

@nesthib: ça vient de l'installateur Ubuntu.
Si j'ai bien compris, [ "$(printf %x \'"$(cat "$var")")" = 1 ] équivaut à [[ "$(cat "$var")" = '^A' ]]  , c'est bien ça ?


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#5 Le 26/11/2012, à 02:54

Watael

Re : Question bash (printf %x)

Bousky a écrit :

Par contre si tu utilises « $(…) » tu perds la compatibilité avec sh, celui-ci ne comprends que « `…` »

ah bon? depuis quand ?


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

Hors ligne

#6 Le 26/11/2012, à 07:50

Bousky

Re : Question bash (printf %x)

Depuis que « $(…) » est une extension apportée par bash tongue

Dans la pratique, sh existe rarement en tant que tel et un autre shell est exécuté à la place : bash dans la plus part des cas, dash sur Debian et ses dérivés (dont Ubuntu). « /bin/sh » est en fait un lien vers « /bin/bash » ou « /bin/dash ». Donc des scripts qui ne sont pas réellement compatible avec sh peuvent être exécutés avec la commande /bin/sh. Mais seul sh est standard (il est présent sur tous les systèmes UNIX), et un script qui utilise de telles extensions tout en se faisant passer pour un script sh (« #!/bin/sh » en début) peut ne pas s'exécuter sur une autre machine : il suffit que le système n'utilise pas même shell de remplacement, ou que sh soit réellement utilisé.


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#7 Le 26/11/2012, à 08:28

Watael

Re : Question bash (printf %x)

en "direct live" depuis les spécifications POSIX de l'OpenGroup

2.6.3 Command Substitution

Command substitution allows the output of a command to be substituted in place of the command name itself. Command substitution shall occur when the command is enclosed as follows:

    $(command)

or (backquoted version):

    `command`

c'est un peu standard, non?


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

Hors ligne

#8 Le 26/11/2012, à 12:58

YannUbuntu

Re : Question bash (printf %x)

YannUbuntu a écrit :

[ "$(printf %x \'"$(cat "$var")")" = 1 ] équivaut à [[ "$(cat "$var")" = '^A' ]]  , c'est bien ça ?

Je viens de faire le test sur un fichier contenant ^A , et à priori ce n'est pas ça.

Je n'ai donc pas compris ce que signifie:

nesthib a écrit :

Le test vérifie si le code hexadécimal est égal à 1 (comparaison de chaîne), soit un caractère de contrôle initialement égal à « Start of Heading » (^A).

Pouvez-vous m'éclairer svp?


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#9 Le 26/11/2012, à 13:14

pingouinux

Re : Question bash (printf %x)

Bonjour,

[[ "$(cat "$var")" = '^A' ]] 

Pour que ce test puisse être correct, il faut que le fichier "$var" ne contienne qu'un seul caractère, et que la séquence '^A' soit générée par 'Ctrl+V Ctrl+A'.
Autre façon de faire :

[[ "$(cat "$var")" = $'\x01' ]]

Hors ligne

#10 Le 26/11/2012, à 13:58

YannUbuntu

Re : Question bash (printf %x)

pingouinux a écrit :

Autre façon de faire :

[[ "$(cat "$var")" = $'\x01' ]]

Merci beaucoup!
(pour info chez moi impossible de générer ce caractère via Ctrl+V Ctrl+A, il m'a fallu faire un echo $'\x01' , puis le copier-coller.

EDIT:
je remarque que [ "$(printf %x \'"$(cat "$var")")" = 1 ] est vrai même si le fichier contient d'autres caractères après ^A.

Dernière modification par YannUbuntu (Le 26/11/2012, à 14:09)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne