chroot, bash et interprétation….

Je dois vous conter ce qui me fait me sentir ce soir un peu moins petit dans ma vie d’unixien, mais qui m’a fait tourner la tête pendant quelques heures.

Depuis hier, je cherche à exécuter la commande suivante dans un environnement chrooté:

echo "foutu chroot" > /tmp/bong
DI=`less /tmp/bong`
echo $DI > /tmp/oohnon

Commande d’une aussi grande stupidité que de simplicité, n’est-ce pas? Oui, je considère que si vous lisez ces lignes après avoir lu le titre, vous trouvez cela très simple.
Pour effectuer ces commandes dans mon environnement, ceci se fait dans un script comme ceci:

chroot ${CHR_DIR} bash << EOF Je place mon code ici EOF

Mais bien entendu, cela ne fonctionne pas. Pourquoi? Simplement parce que la commande `less /tmp/bong` n'est pas exécutée dans le bash, lancé par la commande chroot, mais elle est exécutée pendant le chargement dans le fichier terminé par EOF!!! Elle est interprétée immédiatement, et non lors de l'exécution. J'en vois pleins me dire, mais évidemment... Et bien, c'est maintenant évident pour moi, mais il m'a fallu pas mal de temps pour le comprendre.
Bien entendu, les esprits vifs et alertes auront reperé qu'il en est de même pour $DI qui est interprétée immédiatement et donc vide. Il faut maintenant réécrire le code pour que les commandes ne soient pas interprétée au moment de la création de ce fichier temporaire. voilà, comment faire:

chroot ${CHR_DIR} bash << EOF echo "foutu chroot" > /tmp/bong
DI=`less /tmp/bong`
echo $DI > /tmp/oohnon
EOF


C'est le fameux qui va éviter l'interprétation des ` et $ ! Peut-être cela aidera-t'il quelqu'un, un jour?

Pas d'articles similaires.

Posted in Uncategorized. Bookmark the permalink. RSS feed for this post. Leave a trackback.

2 Responses to chroot, bash et interprétation….

  1. Markus Bocker says:

    bonjour,

    j’ai une question:

    pour quitter l’environnement “chroot” ne faut-il pas ajouter un “exit” à la fin? C’est à dire juste avant le dernier EOF?

    • stephbul says:

      Bonjour,
      Le “exit” n’est pas nécessaire à la fin. La sortie de chroot est la sortie d’exécution des commandes exécutées dans le chroot. Un “exit” avant le EOF serait exécuté à l’intérieur du chroot, mais ne fait pas “sortir” du chroot. Dans l’exemple, il interrompt la commande exécutée dans le shell, mais pas le chroot à proprement parlé.

      Pas sûr d’être très clair!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam

Swedish Greys - a WordPress theme from Nordic Themepark.