Pages : 1
#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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 25/11/2012, à 11:50
- Bousky
Re : Question bash (printf %x)
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)
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
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)
[ "$(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:
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)
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
Pages : 1