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 23/06/2014, à 12:09

White Angels

[RESOLU] Comment utiliser echo en root ?

Bonjour,

je suis en train de faire un script de montage de partition et j'aimerais utiliser echo en root, je m'explique :

je fais cette commande :

sudo echo "geb-dev$poste:/home/www/${LINE};/web /home/$USER/dev/${LINE}; nfs rw,nfsvers=3,rsize=32768,wsize=32768,hard,udp,lock 0 0 \n" >> /etc/fstab

la commande echo est bien en root mais impossible d'écrire dans le fichier (je n'ai pas la permission nécessaire) après une lecture sur le net j'ai pu voir que cela venais de l'opérateur de redirection qui avait les droits de l'utilisateur courant.

Comment faire pour pouvoir écrire cette ligne dans /etc/fstab ?

Dernière modification par White Angels (Le 23/06/2014, à 20:25)


OS : Ubuntu 14.04 Trusty Tahr  || Nombre de convertis aux libres : 2 (peut-être une troisième)

Hors ligne

#2 Le 23/06/2014, à 12:16

Compte anonymisé

Re : [RESOLU] Comment utiliser echo en root ?

echo "toto" | sudo tee -a /tmp/titi
echo "geb-dev$poste:/home/www/${LINE};/web /home/$USER/dev/${LINE}; nfs rw,nfsvers=3,rsize=32768,wsize=32768,hard,udp,lock 0 0 \n" | sudo tee -a /etc/fstab

ps: n'oublie pas le -a.

#3 Le 23/06/2014, à 12:16

jplemoine

Re : [RESOLU] Comment utiliser echo en root ?

En fait, il ne faut pas faire un sudo dans le script mais lancer le script en sudo.
lancement ;

sudo ./mon_script.sh

Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#4 Le 23/06/2014, à 12:32

White Angels

Re : [RESOLU] Comment utiliser echo en root ?

jplemoine a écrit :

En fait, il ne faut pas faire un sudo dans le script mais lancer le script en sudo.
lancement ;

sudo ./mon_script.sh

non, car quand je lance mon script en sudo, la variable $USER vaut root et pas mon nom d'utilisateur


PS : Merci beaucoup φlip, ta solution fonctionne parfaitement ! Pourquoi avec les opérateurs de redirection on ne peut pas utiliser sudo alors qu'avec tee on peut ?

Dernière modification par White Angels (Le 23/06/2014, à 12:36)


OS : Ubuntu 14.04 Trusty Tahr  || Nombre de convertis aux libres : 2 (peut-être une troisième)

Hors ligne

#5 Le 23/06/2014, à 12:40

Compte anonymisé

Re : [RESOLU] Comment utiliser echo en root ?

Parce-que le sudo est après le pipe (|)
Le $user peut faire echo "toto", mais dans un second temps, il faut bien les droits root pour écrire dans fstab (seconde opération).

#6 Le 23/06/2014, à 12:43

tiramiseb

Re : [RESOLU] Comment utiliser echo en root ?

Salut,

Pourquoi avec les opérateurs de redirection on ne peut pas utiliser sudo alors qu'avec tee on peut ?

Les opérateurs de redirection sont interprétés par ton shell et s'appliquent à l'ensemble de la commande. En l'occurrence, ton « >> » s'applique à la sortie de sudo.

Avec tee, il ne s'agit pas d'une redirection : c'est la commande tee, exécutée au travers de sudo, qui écrit dans le fichier destination.
C'est en quelque sorte un contournement du problème, vu que le but de tee est plutôt de dupliquer la sortie standard dans un fichier et non de "remplacer" un opérateur de redirection...

Hors ligne

#7 Le 23/06/2014, à 12:54

pingouinux

Re : [RESOLU] Comment utiliser echo en root ?

Hello,
Tu peux aussi faire ceci :

sudo bash -c "echo \"Le texte à écrire\" >>/etc/fstab"

Hors ligne

#8 Le 23/06/2014, à 12:56

Haleth

Re : [RESOLU] Comment utiliser echo en root ?

Si cela t'intéresse, c'est en rapport avec la gestion des sous-processus bash
Quand tu fais un pipe, bash fork, et la sortie du premier bash (le shell "courant") est envoyé vers l'entrée du deuxième (celui qui execute ta 2ème commande)

Ainsi, lorsque tu écris sudo cmd1 | cmd2, le shell courant execute sudo cmd1, et le sous-shell execute cmd2. Ce dernier n'est donc pas executé avec sudo

C'est le même problème que tu rencontres lorsque tu essayes de faire un code comme ceci :

variable=toto
cat toto | while read line
do
   variable=tata
done
echo $variable

Ce code affiche toto, et pas tata : le cat est exécuté dans le shell courant, alors que le while est exécuté dans un sous-shell. Ainsi, variable est modifié dans le sous-shell, ce qui n'a aucun effet sur ton shell courant


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#9 Le 23/06/2014, à 13:44

White Angels

Re : [RESOLU] Comment utiliser echo en root ?

Je ne m'attendais pas à avoir autant de réply, je suis très content et en plus ils sont tous très constructif !

PS : Haleth, je ne savais pas du tout que lorsque tu utilisais une boucle en bash cela créais un fork ! Mais tu es sûr de toi ?

Lorsque dans mon bash j'ai quelque chose comme ça :

instruction 1
Tant Que (x)
   faire qqc
fin ttq
instruction2

si le shell créait un fork, j'aurais instruction 1 qui s’effectuerait, puis la boucle qui se fork et ensuite l'instruction 2 qui s’exécute.
Hors lorsque je fais une boucle en shell, l'instruction 2 attend que la boucle aie fini son travail.


OS : Ubuntu 14.04 Trusty Tahr  || Nombre de convertis aux libres : 2 (peut-être une troisième)

Hors ligne

#10 Le 23/06/2014, à 15:19

Haleth

Re : [RESOLU] Comment utiliser echo en root ?

Le point important est la présence du pipe : la partie à droite d'un pipe s'exécute dans un sous-shell
Dans ton exemple, tu n'as pas de pipe, c'est le shell courant qui exécute ta boucle

Le man bash qui va avec:

man bash a écrit :

   Conduites
       Une conduite (« pipeline ») est une suite  d'une  ou  plusieurs
       commandes  séparées  par un des opérateurs de contrôle | ou |&.
       Le format d'une conduite est :

              [time [-p]] [!] commande_1 [ [|⎪|&] commande_2 ... ]

       La sortie standard de la commande_1 est connectée par un tube à
       l'entrée  standard de la commande_2. Cette connexion est effec‐
       tuée avant toute redirection indiquée par la commande elle-même
       (consultez REDIRECTIONS ci-dessous).


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#11 Le 23/06/2014, à 15:32

tiramiseb

Re : [RESOLU] Comment utiliser echo en root ?

Malgré tout, le shell principal attend la fin du sous-shell avant de continuer avec les instructions suivantes...

Hors ligne