Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 16/12/2009, à 00:03

Hizoka

(resolu) lancer une fonction en root ?

Bonsoir,

j'ai un script contenant pas mal de fonctions diverses, certaines nécessitant d'être en root et d'autres non.

Est-il possible de lancer une fonction en root dans le script bash ?

ex :

if  [[ -n $(egrep "Ajout_depots|Chuck_Norris|Codage|Suppr_tab|Verification_version" <<< "${i}") ]]
then
	${i}
else
	sudo ${i}
fi

merci à vous smile

Dernière modification par Hizoka (Le 17/12/2009, à 09:05)

En ligne

#2 Le 16/12/2009, à 00:14

slasher-fun

Re : (resolu) lancer une fonction en root ?

Bonjour,

Oui, mais l'utilisateur sera prompté pour saisir son mot de passe (une seule fois pour tous les sudo du script)

Hors ligne

#3 Le 16/12/2009, à 00:16

Hizoka

Re : (resolu) lancer une fonction en root ?

quand je lance ma fonction avec un sudo devant :

command not found

En ligne

#4 Le 16/12/2009, à 00:22

slasher-fun

Re : (resolu) lancer une fonction en root ?

L'erreur doit être ailleurs (le $i), parce que ça fonctionne (cf. http://doc.ubuntu-fr.org/flashplayer#installation_de_flash_player_10_flash_version_64_bits_avec_un_script_automatique par exemple)

Hors ligne

#5 Le 16/12/2009, à 00:32

Hizoka

Re : (resolu) lancer une fonction en root ?

euuuhhh

je ne vois pas de fonction dans ce script...

autre exemple :

function Virtualbox()
{
modprobe -r kvm_intel
}

function Coucou()
{
echo "Salut ça va ?"
}

if [[ "$1" == "Virtualbox" ]]
then
  sudo Virtualbox
elif [[ "$1" == "Coucou" ]]
then
  Coucou
fi

la commande : sudo Virtualbox renvoie une erreur

Dernière modification par Hizoka (Le 16/12/2009, à 00:32)

En ligne

#6 Le 16/12/2009, à 08:11

Totor

Re : (resolu) lancer une fonction en root ?

Bonjour,

Dans l'immédiat voici ma réponse : la fonction n'est définie que dans le contexte de ton utilisateur et n'est pas connue de root. Il est donc logique que cela ne fonctionne pas.

EDIT :
Voilà une solution (mais je pense qu'elle a ses limites, notamment sur la portée des variables) :

sudo bash -c "$(type nomFonction|sed '1d');nomFonction"

Dernière modification par Totor (Le 16/12/2009, à 08:25)


-- Lucid Lynx --

Hors ligne

#7 Le 16/12/2009, à 08:26

compte supprimé

Re : (resolu) lancer une fonction en root ?

Hello,

sudo permet d'exécuter des commandes (= des fichiers exécutables ou des scripts). Pour exécuter une fonction, il faut que tu la transformes en script et ensuite tu pourras faire un sudo de ton script.

#8 Le 16/12/2009, à 18:36

Hizoka

Re : (resolu) lancer une fonction en root ?

ouais bah finalement je vais foutre des sudo un peu partout dans les fonctions en ayant besoin, je voulais éviter de les mettre pour simplifier un peu mais tant pis.

merci à vous

PS ; je testerai ta technique Totor wink

En ligne

#9 Le 16/12/2009, à 21:11

sputnick

Re : (resolu) lancer une fonction en root ?

 ccc(){ whoami; }; sudo bash -c "$(declare -f ccc); ccc"

bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#10 Le 17/12/2009, à 09:04

Hizoka

Re : (resolu) lancer une fonction en root ?

niquel !!!

merci à vous !!!

En ligne

#11 Le 23/12/2009, à 21:05

Hizoka

Re : (resolu) lancer une fonction en root ?

est-il possible d'ajouter une variable dans cette commande ?

genre : FUSHIA="\033[1;35m"

En ligne

#12 Le 23/12/2009, à 21:55

sputnick

Re : (resolu) lancer une fonction en root ?

Hizoka a écrit :

est-il possible d'ajouter une variable dans cette commande ?

genre : FUSHIA="\033[1;35m"

Precise ta pensé, c'est pas clair pour moi.
Que cherche tu à faire ?


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#13 Le 23/12/2009, à 21:58

Hizoka

Re : (resolu) lancer une fonction en root ?

comme le disait totor, le lancement de la fonction avec cette commande ne conserve pas les variables se trouvant avant son lancement (ni même avec un export).

sachant que j'utilise des variables pour mettre de la couleur dans les echo utilisés dans toutes mes fonctions, je cherche un moyen d'intégrer ces variables dans la commande "sudo bash -c "$(type nomFonction|sed '1d');nomFonction"" afin de ne pas à avoir à recopier ces variables dans toutes mes fonctions.

en gros je cherche une solution pour que via cette commande il arrive à trouver les variables de couleurs smile

En ligne

#14 Le 23/12/2009, à 22:30

sputnick

Re : (resolu) lancer une fonction en root ?

$ FOO=pouet
$ ccc(){ whoami; }; sudo bash -c "$(declare -f ccc); FOO=$FOO; echo \$FOO; ccc"
pouet
root
$

bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#15 Le 23/12/2009, à 23:07

Totor

Re : (resolu) lancer une fonction en root ?

si toutes tes variables sont définies dans un fichier :

ccc(){ whoami; }; sudo bash -c "$(declare -f ccc); $(cat fichier); ccc"

Dernière modification par Totor (Le 23/12/2009, à 23:08)


-- Lucid Lynx --

Hors ligne

#16 Le 23/12/2009, à 23:18

sputnick

Re : (resolu) lancer une fonction en root ?

Peux etre peux tu creer un fichier d'environnement à sourcer aussi !?
source /root/.myenv


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#17 Le 24/12/2009, à 07:26

Hizoka

Re : (resolu) lancer une fonction en root ?

merci.

y a moyen de foutre mes variables dans .bashrc ? ou dans un fichier qui serait lu de base par les scripts ?

la commande :

ccc(){ whoami; }; sudo bash -c "$(declare -f ccc); FOO=$FOO; echo \$FOO; ccc"

ne marche pas avec :

FUSHIA="\033[1;35m"
NOIR="\033[1;0m"
BLEUFONCE="\033[1;34m"
VERT="\033[1;32m"
ROUGE="\033[1;31m"

j'obtiens :

bash: line 86: 35m : commande introuvable
bash: line 86: 0m : commande introuvable 
bash: line 86: 34m : commande introuvable
bash: line 86: 32m : commande introuvable
bash: line 86: 31m : commande introuvable

033[1Version installée033[1 : 033[1300_m68033[1.
033[1Version disponible033[1 : 033[1300_m68033[1.

Dernière modification par Hizoka (Le 24/12/2009, à 07:30)

En ligne

#18 Le 24/12/2009, à 10:58

Hizoka

Re : (resolu) lancer une fonction en root ?

au final j'ai voulu modifié les fichiers : /etc/bash.bashrc /etc/environment /etc/profile

mais ça ne marche pas pour les scripts apparament.

Dernière modification par Hizoka (Le 24/12/2009, à 11:02)

En ligne

#19 Le 24/12/2009, à 11:31

sputnick

Re : (resolu) lancer une fonction en root ?

ccc(){ whoami; }; sudo bash -c "source ~hizoka/.bashrc; echo \$FUSHIA; ccc"

Pas testé, dit nous si ca marche...


Tu peux remplacer  ~hizoka/.bashrc par n'importe quel fichier.


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#20 Le 24/12/2009, à 11:44

Hizoka

Re : (resolu) lancer une fonction en root ?

ca me retourne bien "\033[1;35m".

ok merci pour les infos smile

dommage quand même que bash ne regarde pas dans les fichiers de lui même...

En ligne

#21 Le 24/12/2009, à 12:28

sputnick

Re : (resolu) lancer une fonction en root ?

Faut bien cerner le fait que les users sont compartimentés. Une variable est portée à un environement, donc à un user particulier ( si elle a été déclarée dans cet environement ). C'est le fonctionnement et le fondement des systèmes Unix, et ça contribue à la sécurité. Faut aussi avoir la vision "processus" avec les héritages d'environnement des fork et des threads.
Je ne connais pas ton besoin concret et le contexte, mais si c'est que pour ton usage perso, tu doit pouvoir placer ca dans /etc/profile.
Si tu voit que ca marche pas, tu peux essayer soit de placer tes variables dans tous les bashrc ou alors mettre un source /etc/profile dans tes bashrc


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#22 Le 24/12/2009, à 13:28

Hizoka

Re : (resolu) lancer une fonction en root ?

en fait ce sont des variables que j'utilise dans pas mal de mes scripts, aussi bien en USER qu'en ROOT.

Je cherche donc un moyen pourqu'elles soient lues dans tous mes scripts sans que j'ai à les reprendre.

Cela fonctionne quand je tape dans mon terminal mais cela n'est plus utilisé pour mes scripts.

Apres il est toujours possible de faire comme tu dis : source le fichier

mais j'aurais aimé un truc qui gére ça tout seul comme un grand smile

En ligne

#23 Le 24/12/2009, à 13:56

sputnick

Re : (resolu) lancer une fonction en root ?

C'est le role du /etc/profile normalement, regarde cette doc http://lfs.traduc.org/view/blfs-1.0-fr/postlfs/profile.html
Je n'ai pas ubuntu, je ne peux pas faire de test. Sous archlinux, /etc/profile n'est pas sourcé par defaut comme d'autres distribs, mais du coup si je veut un environement partagé par tous le monde, je met ce qu'il y a en commun dans /etc/profile et je source celui-ci dans les .bashrc de chaque user...
( si c'est pour un usage non interactif genre crontab, .bashrc n'est pas sourcé par defaut, c'est le .bash_profile qu'il l'est dans ce cas )


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

#24 Le 24/12/2009, à 14:00

sputnick

Re : (resolu) lancer une fonction en root ?

Extrait de mon /etc/profile :

#
# /etc/profile
#
# This file is intended to be used for ALL common
# Bourne-compatible shells. Shell specifics should be
# handled in /etc/profile.$SHELL where $SHELL is the name
# of the binary being run (discounting symlinks)
#
# Sections taken from SuSe's /etc/profile
# Note the explicit use of 'test' to cover all bases
#  and potentially incompatible shells

bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne

Haut de page ↑