Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script shell/bash et changement d'utilisateur

5 réponses
Avatar
Arnaud Launay
Salut,

J'ai un script en bash (rulesdujour, avec spamassassin) qui est
défini de cette façon

[ "${SA_LINT}" ] || SA_LINT="spamassassin --lint"; # Command used to lint the rules

Or, c'est root qui lance ce script, mais je préférerais que ce
morceau soit lancé par un autre utilisateur, donc j'ai essayé
dans le fichier de configuration d'introduire un truc du genre:

SA_LINT="su - amavis -c 'spamassassin --lint'"


Malheureusement ça déconne:
***WARNING***: su - amavis -c 'spamassassin --lint' failed.

Lint output:
--lint': -c: line 0: unexpected EOF while looking for matching `''
--lint': -c: line 1: syntax error: unexpected end of file

si je colle SA_LINT=`blabla`, il est évalué avant d'être appellé,
donc ça ne va pas non plus...

Il est appellé comme ça par le script:

${SA_LINT} > /dev/null 2>&1; LINTFAILED=$?;

Pourtant, en ligne de commande, ça passe nickel:
eluard ~ # su - amavis -c 'spamassassin --lint' ; RETOUR=$?
eluard ~ # echo $RETOUR
0

Griuik...

Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/

5 réponses

Avatar
Pascal Bourguignon
Arnaud Launay writes:

Salut,

J'ai un script en bash (rulesdujour, avec spamassassin) qui est
défini de cette façon

[ "${SA_LINT}" ] || SA_LINT="spamassassin --lint"; # Command used to lint the rules

Or, c'est root qui lance ce script, mais je préférerais que ce
morceau soit lancé par un autre utilisateur, donc j'ai essayé
dans le fichier de configuration d'introduire un truc du genre:

SA_LINT="su - amavis -c 'spamassassin --lint'"


SA_LINT=(su - amavis -c 'spamassassin --lint')

[ ${SA_LINT[@]} ] || SA_LINT=(spamassassin --lint); # Command used to lint the rules


Malheureusement ça déconne:
***WARNING***: su - amavis -c 'spamassassin --lint' failed.

Lint output:
--lint': -c: line 0: unexpected EOF while looking for matching `''
--lint': -c: line 1: syntax error: unexpected end of file

si je colle SA_LINT=`blabla`, il est évalué avant d'être appellé,
donc ça ne va pas non plus...

Il est appellé comme ça par le script:

${SA_LINT} > /dev/null 2>&1; LINTFAILED=$?;
${SA_LINT[@]} > /dev/null 2>&1; LINTFAILED=$?;



Pourtant, en ligne de commande, ça passe nickel:
eluard ~ # su - amavis -c 'spamassassin --lint' ; RETOUR=$?
eluard ~ # echo $RETOUR
0



--
__Pascal Bourguignon__ http://www.informatimago.com/

"Indentation! -- I will show you how to indent when I indent your skull!"

Avatar
Arnaud Launay
Le Sat, 10 Dec 2005 14:11:45 +0100, Pascal Bourguignon écrivit:
SA_LINT="su - amavis -c 'spamassassin --lint'"
SA_LINT=(su - amavis -c 'spamassassin --lint')



Démarrer un sous-shell. J'y avais pas pensé.

[ ${SA_LINT[@]} ] || SA_LINT=(spamassassin --lint); # Command used to lint the rules
Il est appellé comme ça par le script:
${SA_LINT} > /dev/null 2>&1; LINTFAILED=$?;
${SA_LINT[@]} > /dev/null 2>&1; LINTFAILED=$?;



Oui non mais non, je n'ai pas l'intention de modifier le script
original, c'est un coup à tout perdre lors d'une mise à jour.

Ou alors le faire include dans le mainstream.
Je vais déjà tenter le () sans modifier le reste.

Merci,
Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/


Avatar
Pascal Bourguignon
Arnaud Launay writes:

Le Sat, 10 Dec 2005 14:11:45 +0100, Pascal Bourguignon écrivit:
SA_LINT="su - amavis -c 'spamassassin --lint'"
SA_LINT=(su - amavis -c 'spamassassin --lint')



Démarrer un sous-shell. J'y avais pas pensé.


Pas du tout!

Ça défini un tableau:


[ tmp]$ SA_LINT=(su - amavis -c 'spamassassin --lint')
[ tmp]$ for i in "${SA_LINT[@]}" ; do echo $i ; done
su
-
amavis
-c
spamassassin --lint
[ tmp]$ echo ${SA_LINT[4]}
spamassassin --lint


[ ${SA_LINT[@]} ] || SA_LINT=(spamassassin --lint); # Command used to lint the rules
Il est appellé comme ça par le script:
${SA_LINT} > /dev/null 2>&1; LINTFAILED=$?;
${SA_LINT[@]} > /dev/null 2>&1; LINTFAILED=$?;



Oui non mais non, je n'ai pas l'intention de modifier le script
original, c'est un coup à tout perdre lors d'une mise à jour.


T'aurais pu le dire au début que tu veux une solution mais que tu ne
veux rien changer.


Ou alors le faire include dans le mainstream.
Je vais déjà tenter le () sans modifier le reste.


Bon courrage!

[ tmp]$ echo $SA_LINT
su

--
__Pascal Bourguignon__ http://www.informatimago.com/

This is a signature virus. Add me to your signature and help me to live.



Avatar
Stephane Chazelas
2005-12-10, 08:45(+00), Arnaud Launay:
[...]
SA_LINT="su - amavis -c 'spamassassin --lint'"


Malheureusement ça déconne:
***WARNING***: su - amavis -c 'spamassassin --lint' failed.
[...]


Probablement parce que c'est lancé par

$SA_LINT

au lieu de

eval "$SA_LINT"

or sh -c "$SA_LINT"

Essaie:

SA_LINT="eval su - amavis -c 'spamassassin --lint'"

Le shell splittera, mais eval recollera.

--
Stéphane

Avatar
Arnaud Launay
Le Sat, 10 Dec 2005 17:57:48 +0000, Stephane Chazelas écrivit:
SA_LINT="eval su - amavis -c 'spamassassin --lint'"


Ça marche nickel. Merci beaucoup :-)

Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/