Re: root OK sudo non OK : pourquoi ?

Page principale

Répondre à ce message
Auteur: Marc TERRIER
Date:  
À: Pierre Mazein
CC: guilde
Sujet: Re: root OK sudo non OK : pourquoi ?
Bonjour Pierre,

En voilà une idée qu'elle est bonne ! Mes scripts sed, contrairement à certains de mes scripts awk, sont tellement courts que je n'utilise jamais cette possibilité de mettre le code sed dans un fichier séparé, mais il est vrai qu'elle existe... et je regrette de ne pas y avoir pensé tout seul ! :-)

Merci !

P.S. : cela n'enlève rien à l'intérêt de creuser plus en détail les pistes "sudo -s" et "bash -c" qui m'ont été suggérées par ailleurs.

--
Marc TERRIER

----- Mail original -----
De: "Pierre Mazein" <mazeinp@???>
À: guilde@???
Envoyé: Mardi 6 Mars 2018 11:15:19
Objet: Re: root OK sudo non OK : pourquoi ?

Bonjour,

Ne pouvez vous pas utiliser un fichier script pour éviter la ligne de
commande est le travail de substitution de bash :

       -f script-file, --file=script-file

              add the contents of script-file to the commands to be
executed

Expérience par l'esprit :

$ cat sedsctipt.txt
's/^#$//g; /./,/^$/\!d'

$sudo bash -c "sed -f sedscript.txt jail.conf > jail.local"

Travail fait ?

Pierre

Le 06/03/2018 à 08:11, Marc TERRIER a écrit :
> Le 05/03/2018 à 14:35, BOITEUX, Frederic a écrit :
>>     Bonjour,
>>
>> Ton erreur « !d': event not found » vient du bash, pas de sed : par
>> défaut le caractère « ! » permet de rappeler une commande précédente
>> en bash… Pour éviter ton souci, je pense qu'il faut que tu mettes un
>> anti-slash devant ton ! pour qu'il ne soit pas interprété par bash
>> ; attention, tu as aussi un $ dans ton expression sed. Tu peux essayer :
>>
>> $ sudo bash -c "sed 's/^#$//g; /./,/^$/\!d' jail.conf > jail.local"
>>
>> Mais peut-être faudra-t-il des \ supplémentaires, car il y a 2
>> niveaux de subsitutions : le bash où tu lances ton sudo, et celui
>> lancé par ton sudo !
>>
>>     Cdlt,
>>         Fred.
>
> Bonjour,
>
> Piste intéressante, les antislashs, mais je n'ai pas encore trouvé
> *la* solution (excepté celle proposée par Christian) :
>
> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/!d'
> jail.conf > jail.local"
> -bash: !d': event not found
> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/\!d'
> jail.conf > jail.local"
> sed: -e expression n°1, caractère 19: commande inconnue: `\'
> pi@raspi:/etc/fail2ban $ sudo bash -c "sed 's/^#$//g; /./,/^$/\\!d'
> jail.conf > jail.local"
> sed: -e expression n°1, caractère 19: commande inconnue: `\'
> pi@raspi:/etc/fail2ban $ sudo bash -c "sed \'s/^#$//g; /./,/^$/!d\'
> jail.conf > jail.local"
> -bash: !d\': event not found
> pi@raspi:/etc/fail2ban $ sudo bash -c "sed \\'s/^#$//g; /./,/^$/!d\\'
> jail.conf > jail.local"
> -bash: !d\\': event not found
> pi@raspi:/etc/fail2ban $
>
> Je découvre aussi, à cette occasion, que quand la commande provoque
> une erreur comme le "!d': event not found", la commande n'est pas
> ajoutée dans l'historique des commandes.
>
> Mais ces histoires d'environnement et de niveaux de substitution sont
> clairement des pistes intéressantes à creuser.
>
> Merci.
>