Re: Comanda su amb parametres diversos

2016-03-20 Conversa Narcis Garcia
Moltes gràcies Ernest, Eloi i Alex per les respostes, que m'han ajudat a
trobar la solució.
Faig moltes coses amb Shell Scripts, sobretot perquè són directament
executables i portables a un munt de sistemes operatius (fins i tot
Android que ni tan sols és GNU). Els principals inconvenients que  trobo
del llenguatge són que no s'executa amb la velocitat d'un compilat i la
manca de components d'escriptori (GUI).

Aquest tema del «su» el necessitava per millorar els programes «peinddd»
i «amoreos».


__
I'm using this express-made address because personal addresses aren't
masked enough at lists.debian.org archives.

El 20/03/16 a les 13:08, Ernest Adrogué ha escrit:
> 2016-03-20, 12:17 (+0100); Narcis Garcia escriu:
>> El getopt sembla la millor solució; no veig aleshores la utilitat del
>> doble guió -- pel su.
> 
> su -- -c "$args"  i
> su -c "$args"
> 
> fan coses diferents.  Tots dos executen /bin/bash (o el que l'usuari tingui
> configurat com a shell per defecte) com a root i passen els arguments -c
> "$args" a /bin/bash.  La diferència és que en el primer cas s'executa de
> forma interactiva (amb l'entrada connectada al terminal) i en el segon no,
> per tant si el programa és interactiu no funcionarà correctament en la
> versió sense el doble guió.
> 
> També hi ha el problema que els arguments s'han de citar amb les cometes
> adequades, però la sintaxi exacta depèn de cada shell.  Per exemple, si
> l'usuari té configurat tcsh en lloc de bash o sh li hauries de dir al getopt
> que utilitzi les cometes adequades per a tcsh.
> 



Re: Comanda su amb parametres diversos

2016-03-20 Conversa Alex Muntada
Narcis Garcia:

> su root -c "$@"

La clau és que "$@" respecta les cometes originals i això no casa
amb l'opció -c del su. Si utilitzes -c "$*" no tindràs aquest
problema però en pots tenir d'altres en cas que vulguis tenir
algun paràmetre amb espais.

Cadenes amb espais, cometes, etc. són un malson quan et poses a
fer programació en shell scripts.

En aquests casos, normalment jo em decanto per utilitzar algun
llenguatge de programació més flexible enlloc de fer un shell
script. Habitualment tots els sistemes moderns tenen versions
mínimes de perl i python instal·lats de sèrie, qualsevol dels
dos serveix. També hi ha l'opció de fer-ho en C, és clar.

Salut,
Alex



Re: Comanda su amb parametres diversos

2016-03-20 Conversa Ernest Adrogué
2016-03-20, 12:17 (+0100); Narcis Garcia escriu:
> El getopt sembla la millor solució; no veig aleshores la utilitat del
> doble guió -- pel su.

su -- -c "$args"  i
su -c "$args"

fan coses diferents.  Tots dos executen /bin/bash (o el que l'usuari tingui
configurat com a shell per defecte) com a root i passen els arguments -c
"$args" a /bin/bash.  La diferència és que en el primer cas s'executa de
forma interactiva (amb l'entrada connectada al terminal) i en el segon no,
per tant si el programa és interactiu no funcionarà correctament en la
versió sense el doble guió.

També hi ha el problema que els arguments s'han de citar amb les cometes
adequades, però la sintaxi exacta depèn de cada shell.  Per exemple, si
l'usuari té configurat tcsh en lloc de bash o sh li hauries de dir al getopt
que utilitzi les cometes adequades per a tcsh.



Re: Comanda su amb parametres diversos

2016-03-20 Conversa Narcis Garcia
El getopt sembla la millor solució; no veig aleshores la utilitat del
doble guió -- pel su.



__
I'm using this express-made address because personal addresses aren't
masked enough at lists.debian.org archives.

El 19/03/16 a les 20:31, Ernest Adrogué ha escrit:
> 2016-03-19, 19:26 (+0100); Narcis Garcia escriu:
>> Fet d'aquestes maneres no es queixa, però només passa el primer
>> paràmetre i no els següents:
>>
>> su root -- -c "$@"
>> su -- -c "$@"
>>
>> És a dir, que si executo:
>> ./llansador.sh nano --boldtext "Un document.txt"
>> Només té efecte el "nano"; la resta és ignorat.
> 
> Tens raó, el -c només agafa el primer argument.  Em sembla que has de
> combinar tots els arguments en un de sol, es pot fer amb el getopt
> 
> args="$(getopt -s sh -o "" -- -- "$@" | cut -c 5-)"
> su -- -c "$args"
> 



Re: Comanda su amb parametres diversos

2016-03-20 Conversa Narcis Garcia
L'assignació a una variable no resol els paràmetres amb espais.
Em sembla que amb el getopt es pot fer el millor pedaç possible.


__
I'm using this express-made address because personal addresses aren't
masked enough at lists.debian.org archives.

El 20/03/16 a les 10:28, Eloi ha escrit:
> El 19/03/16 a les 16:10, Narcis Garcia ha escrit:
>> A veure si algú domina el programa «su» (substitute user) per executar
>> una comanda d'una manera que jo no me'n surto:
>>
>> Per posar un exemple, com a usuari «root» vull editar un fitxer
>> especificat per l'usuari i amb algun paràmetre més per l'editor nano.
>> Però tot això fer-ho a través d'un programet que crida su.
>> Aquestes són les sintaxis amb les quals ho he intentat sense èxit
>> (script "llansador.sh"):
>>
>> #!/bin/sh
>> su root -c "$@"
>> su root -- "$@"
>> su root -c -- "$@"
>>
>> $ ./llansador.sh nano --boldtext "Un document.txt"
>>
>>
>> Algú sap encertar l'ús dels dos guionets igual com fan altres interfícies?
>>
>> Nota: necessito NO comptar amb què «sudo» o altres programes menys
>> essencials estiguin instal·lats.
>>
> 
> PARAMS="$@"
> su -c "$PARAMS" root
> 
> El problema és que -c espera com a únic paràmetre la concatenació de
> tots ells, d'aquí la trampa de passar-ho a un altre nom per evitar el
> comportament de separar-los que per defecte fa "$@"
> 



Re: Comanda su amb parametres diversos

2016-03-20 Conversa Eloi
El 19/03/16 a les 16:10, Narcis Garcia ha escrit:
> A veure si algú domina el programa «su» (substitute user) per executar
> una comanda d'una manera que jo no me'n surto:
>
> Per posar un exemple, com a usuari «root» vull editar un fitxer
> especificat per l'usuari i amb algun paràmetre més per l'editor nano.
> Però tot això fer-ho a través d'un programet que crida su.
> Aquestes són les sintaxis amb les quals ho he intentat sense èxit
> (script "llansador.sh"):
>
> #!/bin/sh
> su root -c "$@"
> su root -- "$@"
> su root -c -- "$@"
>
> $ ./llansador.sh nano --boldtext "Un document.txt"
>
>
> Algú sap encertar l'ús dels dos guionets igual com fan altres interfícies?
>
> Nota: necessito NO comptar amb què «sudo» o altres programes menys
> essencials estiguin instal·lats.
>

PARAMS="$@"
su -c "$PARAMS" root

El problema és que -c espera com a únic paràmetre la concatenació de
tots ells, d'aquí la trampa de passar-ho a un altre nom per evitar el
comportament de separar-los que per defecte fa "$@"



Re: Comanda su amb parametres diversos

2016-03-19 Conversa Ernest Adrogué
2016-03-19, 19:26 (+0100); Narcis Garcia escriu:
> Fet d'aquestes maneres no es queixa, però només passa el primer
> paràmetre i no els següents:
> 
> su root -- -c "$@"
> su -- -c "$@"
> 
> És a dir, que si executo:
> ./llansador.sh nano --boldtext "Un document.txt"
> Només té efecte el "nano"; la resta és ignorat.

Tens raó, el -c només agafa el primer argument.  Em sembla que has de
combinar tots els arguments en un de sol, es pot fer amb el getopt

args="$(getopt -s sh -o "" -- -- "$@" | cut -c 5-)"
su -- -c "$args"



Re: Comanda su amb parametres diversos

2016-03-19 Conversa Narcis Garcia
Fet d'aquestes maneres no es queixa, però només passa el primer
paràmetre i no els següents:

su root -- -c "$@"
su -- -c "$@"

És a dir, que si executo:
./llansador.sh nano --boldtext "Un document.txt"
Només té efecte el "nano"; la resta és ignorat.


__
I'm using this express-made address because personal addresses aren't
masked enough at lists.debian.org archives.

El 19/03/16 a les 17:33, Ernest Adrogué ha escrit:
> 2016-03-19, 16:10 (+0100); Narcis Garcia escriu:
>> A veure si algú domina el programa «su» (substitute user) per executar
>> una comanda d'una manera que jo no me'n surto:
>>
>> Per posar un exemple, com a usuari «root» vull editar un fitxer
>> especificat per l'usuari i amb algun paràmetre més per l'editor nano.
>> Però tot això fer-ho a través d'un programet que crida su.
>> Aquestes són les sintaxis amb les quals ho he intentat sense èxit
>> (script "llansador.sh"):
>>
>> #!/bin/sh
>> su root -c "$@"
>> su root -- "$@"
>> su root -c -- "$@"
>>
>> $ ./llansador.sh nano --boldtext "Un document.txt"
>>
>>
>> Algú sap encertar l'ús dels dos guionets igual com fan altres interfícies?
>>
>> Nota: necessito NO comptar amb què «sudo» o altres programes menys
>> essencials estiguin instal·lats.
>>
> 
> su -- -c "$@"
> 
> l'opció -c és de la shell no del 'su', per tant ha d'anar després dels 2
> guionets.
> 



Re: Comanda su amb parametres diversos

2016-03-19 Conversa Ernest Adrogué
2016-03-19, 16:10 (+0100); Narcis Garcia escriu:
> A veure si algú domina el programa «su» (substitute user) per executar
> una comanda d'una manera que jo no me'n surto:
> 
> Per posar un exemple, com a usuari «root» vull editar un fitxer
> especificat per l'usuari i amb algun paràmetre més per l'editor nano.
> Però tot això fer-ho a través d'un programet que crida su.
> Aquestes són les sintaxis amb les quals ho he intentat sense èxit
> (script "llansador.sh"):
> 
> #!/bin/sh
> su root -c "$@"
> su root -- "$@"
> su root -c -- "$@"
> 
> $ ./llansador.sh nano --boldtext "Un document.txt"
> 
> 
> Algú sap encertar l'ús dels dos guionets igual com fan altres interfícies?
> 
> Nota: necessito NO comptar amb què «sudo» o altres programes menys
> essencials estiguin instal·lats.
> 

su -- -c "$@"

l'opció -c és de la shell no del 'su', per tant ha d'anar després dels 2
guionets.