• [^] # Re: warf

    Posté par (site web personnel) . En réponse au message cat /etc/fstab | fgrep -v $udi > /etc/fstab. Évalué à 4.

    Salut,

    la seule vraie solution, c'est de passer par un fichier temporaire.
    sache que quand tu utilises des pipes, toutes les commandes sont exécutées *en même temps*, et non pas l'une après l'autre...
    donc en gros, la dernière commande va écrire dans le fichier pendant que la première le lit. Le comportement est indéterminé, et généralement se solde par un fichier vide (à cause justement du ">").

    Pour l'utilisation d'un fichier temporaire, tu peux faire ça de façon plus ou moins "transparente" avec zsh :

    fgrep -v "$udi" =(cat /etc/fstab) > /etc/fstab

    le =(...) va demander à zsh de créer un fichier temporaire (typiquement sous /tmp/zshXXXXX) contenant le résultat de la commande entre parenthèses.
    Et hop, plus de souci. :)


    La solution la plus propre et la plus portable consiste à faire une lecture d'une copie du /etc/fstab, copie que tu peux créer dans ton /tmp (comme cela tu peux éventuellement ne pas te casser le chou à supprimer le fichier).