OVH Cloud OVH Cloud

script sh

15 réponses
Avatar
Thomas
bonjour :-)

j'ai besoin d'etre certain qu'un script va s'executer sans pb à tous les
coups, parce que sinon je ne peux plus demarrer mon ordi

voilà l'explication :-) :

<http://www.bombich.com/mactips/loginhooks.html>


est ce que des gens veullent bien me confirmer que mon script va
s'executer sans pb à tous les coups svp ? :-)


c'est executé sous root
il y a forcé ment un parametre, qui est le nom d'un utilisateur existant

le but est d'executer un script qui se trouve dans son dossier de
depart, en son nom au lieu de celui de root


#!/bin/sh

if [ ! $1 ]; then
echo "No user specified!"
exit 1
fi
su $1

cd /Users/$1
bin/startupscript &

### Always exit with 0 status
exit 0


ca va ? :-)


vu que c'est sous root, su ne demandera pas de mdp ?

ca renverra 0, de sorte qu'on puisse demarrer,
meme si bin/startupscript
- renvoie autre chose,
- n'est pas executable (parce qu'il manque le x ou parce que le fichier
contient n'importe quoi),
- ou n'existe pas ?

--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"

10 réponses

1 2
Avatar
Laurent Wacrenier
Thomas écrit:
le but est d'executer un script qui se trouve dans son dossier de
depart, en son nom au lieu de celui de root


#!/bin/sh

if [ ! $1 ]; then
echo "No user specified!"
exit 1
fi
su $1

cd /Users/$1
bin/startupscript &


Ces deux dernières commande seront lancées sous root.

#! /bin/sh -
su ${1:?no user specified} -c 'cd && bin/startupscript &'

vu que c'est sous root, su ne demandera pas de mdp ?

ca renverra 0, de sorte qu'on puisse demarrer,
meme si bin/startupscript
- renvoie autre chose,
- n'est pas executable (parce qu'il manque le x ou parce que le fichier
contient n'importe quoi),
- ou n'existe pas ?


Vu que la commande est lancée en tâche de fond, son retour n'influe
pas sur le code d'erreur du script.

Avatar
Stephane Chazelas
2004-09-07, 13:57(+02), Thomas:
[...]
if [ ! $1 ]; then


Cela n'est pas correct,

Quand il voit ca, le shell lance la commande "[" avec les
arguments suivants: "[" (le 0eme argument), "!" et la liste des
arguments que l'expansion de $1 genere et comme $1 n'est pas
entre quotes, le shell tente de considerer $1 comme une liste de
fichiers (puis "]"), donc a part dans certains cas specifiques,
ca ne teste pas si $1 est defini.

if [ "$#" -lt 1 ]; then

(si le nombre d'arguments du script (sans prendre en compte le
0eme) est inferieur a 1.

echo "No user specified!"
exit 1
fi
su $1


su "$1"

ca lance un shell interactif en tant qu'utilisateur "$1". Cette
commande su se termine et le shell qui est en train d'executer
ton script passera a la suite que quand ce shell se terminera
(quand tu auras tapé "exit" dedans).

cd /Users/$1


cd "/Users/$1" || exit

bin/startupscript &

### Always exit with 0 status
exit 0


ca va ? :-)
[...]


Essaie:

#! /bin/sh -
if [ "$#" -lt 1 ]; then
echo >&2 "No user specified!"
exit 1
fi
exec su "$1" -c 'cd "/Users/$1" && bin/startupscript &'

--
Stephane

Avatar
Nicolas.MICHEL
Thomas wrote:

bonjour :-)

j'ai besoin d'etre certain qu'un script va s'executer sans pb à tous les
coups, parce que sinon je ne peux plus demarrer mon ordi

voilà l'explication :-) :

<http://www.bombich.com/mactips/loginhooks.html>


Je laisse les questions de script shell à ceux qui savent mieux.
Perso je ne test pas $1 vu que par définition c'est le username dans ce
cas.

Je voulais juste dire que tu peux booter en singlemode et restaurer
/Library/Preferences/com.apple.loginwindow en cas de pépins.

En outre, je comprends pas pourquoi tu vas multiplier les scripts de
login (/Users/$1/bin/startupscript) plutôt que de les centraliser (par
ex un montage nfs)

Bon, je dis ça mais tu as sûrement tes raisons.
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

Avatar
Stephane Chazelas
2004-09-07, 12:10(+00), Stephane Chazelas:
[...]
exec su "$1" -c 'cd "/Users/$1" && bin/startupscript &'


Ca ne marchera pas car le "$1" dans /Users/$1 n'est pas le meme
que le "$1" du shell qui execute le script, vu que c'est le
premier argument pour le shell lancé par su.

Si le but est d'aller dans le "home directory" de "$1" un "cd"
tout court suffit. Sinon:

exec su "$1" -c 'cd "/Users/$1" && bin/startupscript &' "$1" "$1"

--
Stephane

Avatar
Thomas
merci à tous :-))


In article (Dans l'article)
<1gjqzqd.1yb3lczgr02uuN%,
(Nicolas MICHEL) wrote (écrivait) :

Je voulais juste dire que tu peux booter en singlemode et restaurer
/Library/Preferences/com.apple.loginwindow en cas de pépins.


ok


En outre, je comprends pas pourquoi tu vas multiplier les scripts de
login (/Users/$1/bin/startupscript) plutôt que de les centraliser (par
ex un montage nfs)


il me semble que ca, ca existait deja :
un fichier dans lequel on peut mettre des commandes qui sont executées
au demarrage de l'ordi
(il me semble qu'apache est dans ce fichier, d'ailleurs)

je voulais la meme chose, mais au login
(et executé au nom de celui qui se logge, pas au nom de root, bien sur)

apple a deja fait ca, mais seulement pour les elements double-clicables

vois tu ? :-)



Bon, je dis ça mais tu as sûrement tes raisons.


;-)

--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"

Avatar
Thomas
In article (Dans l'article) ,
Laurent Wacrenier <lwa@ teaser . fr> wrote (écrivait) :

#! /bin/sh -
su ${1:?no user specified} -c 'cd && bin/startupscript &'


merci :-)))

ca sert à quoi le "-" de "#! /bin/sh -" ?

--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"

Avatar
Stephane Chazelas
2004-09-08, 15:26(+02), Thomas:
In article (Dans l'article) ,
Laurent Wacrenier <lwa@ teaser . fr> wrote (écrivait) :

#! /bin/sh -
su ${1:?no user specified} -c 'cd && bin/startupscript &'


merci :-)))

ca sert à quoi le "-" de "#! /bin/sh -" ?


Le systeme va lancer le script de cette maniere:

/bin/sh - <le-script-tel-que-tapé-au-prompt> <ses-arguments>

Sans ce "-", <le-script...> pourra etre pris soit comme une
option, soit comme un script, et on veut bel et bien qu'il soit
pris comme un script.

Essaie de renommer le script en "-i" par exemple.

--
Stephane


Avatar
Thomas
In article (Dans l'article)
,
Stephane Chazelas wrote (écrivait) :

Si le but est d'aller dans le "home directory" de "$1" un "cd"
tout court suffit.


exact
merci pour l'"astuce", que j'avais oublié ;-)


exec su "$1" -c 'cd "/Users/$1" && bin/startupscript &' "$1" "$1"


au fait, pourquoi tu mets exec, alors que laurent n'en met pas ?

--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"

Avatar
Thomas
In article (Dans l'article)
,
Stephane Chazelas wrote (écrivait) :

2004-09-08, 15:26(+02), Thomas:
In article (Dans l'article) ,
Laurent Wacrenier <lwa@ teaser . fr> wrote (écrivait) :

#! /bin/sh -
su ${1:?no user specified} -c 'cd && bin/startupscript &'


merci :-)))

ca sert à quoi le "-" de "#! /bin/sh -" ?


Le systeme va lancer le script de cette maniere:

/bin/sh - <le-script-tel-que-tapé-au-prompt> <ses-arguments>

Sans ce "-", <le-script...> pourra etre pris soit comme une
option, soit comme un script, et on veut bel et bien qu'il soit
pris comme un script.

Essaie de renommer le script en "-i" par exemple.


ok,

donc sh, quand il voit un - , il sait qu'apres il n'y a plus d'option
auquel cas si le ficher script s'appelle -i, il sait qu'il s'agit bien
du script

j'ai bon ? :-)

--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE

"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"



Avatar
Stephane Chazelas
2004-09-08, 17:09(+02), Thomas:
[...]
/bin/sh - <le-script-tel-que-tapé-au-prompt> <ses-arguments>

Sans ce "-", <le-script...> pourra etre pris soit comme une
option, soit comme un script, et on veut bel et bien qu'il soit
pris comme un script.

Essaie de renommer le script en "-i" par exemple.


ok,

donc sh, quand il voit un - , il sait qu'apres il n'y a plus d'option
auquel cas si le ficher script s'appelle -i, il sait qu'il s'agit bien
du script

j'ai bon ? :-)


Tout bon.

Ca s'applique a la plupart des commandes.

On ne fait pas:

rm "$1"

mais

rm -- "$1"

A moins qu'on veuille que "$1" puisse eventuellement etre une
option de "rm" mais ca ne ferait pas de sens dans ce cas la.

--
Stephane


1 2