Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.debian.user.catalan > #4177 > unrolled thread

Comanda su amb parametres diversos

Started byNarcis Garcia <informatica@actiu.net>
First post2016-03-19 16:30 +0100
Last post2016-03-20 14:30 +0100
Articles 10 — 5 participants

Back to article view | Back to linux.debian.user.catalan


Contents

  Comanda su amb parametres diversos Narcis Garcia <informatica@actiu.net> - 2016-03-19 16:30 +0100
    Re: Comanda su amb parametres diversos Ernest Adrogué <nfdisco@gmail.com> - 2016-03-19 18:00 +0100
      Re: Comanda su amb parametres diversos Narcis Garcia <debianlists@actiu.net> - 2016-03-19 19:30 +0100
        Re: Comanda su amb parametres diversos Ernest Adrogué <nfdisco@gmail.com> - 2016-03-19 20:50 +0100
          Re: Comanda su amb parametres diversos Narcis Garcia <debianlists@actiu.net> - 2016-03-20 12:20 +0100
            Re: Comanda su amb parametres diversos Ernest Adrogué <nfdisco@gmail.com> - 2016-03-20 13:30 +0100
              Re: Comanda su amb parametres diversos Narcis Garcia <debianlists@actiu.net> - 2016-03-20 15:30 +0100
    Re: Comanda su amb parametres diversos Eloi <entfe001@gmail.com> - 2016-03-20 10:30 +0100
      Re: Comanda su amb parametres diversos Narcis Garcia <debianlists@actiu.net> - 2016-03-20 12:20 +0100
    Re: Comanda su amb parametres diversos Alex Muntada <alexm@caliu.cat> - 2016-03-20 14:30 +0100

#4177 — Comanda su amb parametres diversos

FromNarcis Garcia <informatica@actiu.net>
Date2016-03-19 16:30 +0100
SubjectComanda su amb parametres diversos
Message-ID<reqZb-1BQ-1@gated-at.bofh.it>
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.

[toc] | [next] | [standalone]


#4179

FromErnest Adrogué <nfdisco@gmail.com>
Date2016-03-19 18:00 +0100
Message-ID<resoi-2u4-3@gated-at.bofh.it>
In reply to#4177
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.

[toc] | [prev] | [next] | [standalone]


#4180

FromNarcis Garcia <debianlists@actiu.net>
Date2016-03-19 19:30 +0100
Message-ID<retNn-3yP-1@gated-at.bofh.it>
In reply to#4179
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.
> 

[toc] | [prev] | [next] | [standalone]


#4182

FromErnest Adrogué <nfdisco@gmail.com>
Date2016-03-19 20:50 +0100
Message-ID<rev2N-4l1-1@gated-at.bofh.it>
In reply to#4180
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"

[toc] | [prev] | [next] | [standalone]


#4188

FromNarcis Garcia <debianlists@actiu.net>
Date2016-03-20 12:20 +0100
Message-ID<reJyN-65Q-3@gated-at.bofh.it>
In reply to#4182
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"
> 

[toc] | [prev] | [next] | [standalone]


#4191

FromErnest Adrogué <nfdisco@gmail.com>
Date2016-03-20 13:30 +0100
Message-ID<reKEy-6Rq-13@gated-at.bofh.it>
In reply to#4188
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.

[toc] | [prev] | [next] | [standalone]


#4193

FromNarcis Garcia <debianlists@actiu.net>
Date2016-03-20 15:30 +0100
Message-ID<reMwG-86p-13@gated-at.bofh.it>
In reply to#4191
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.
> 

[toc] | [prev] | [next] | [standalone]


#4187

FromEloi <entfe001@gmail.com>
Date2016-03-20 10:30 +0100
Message-ID<reHQm-4Oc-3@gated-at.bofh.it>
In reply to#4177
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 "$@"

[toc] | [prev] | [next] | [standalone]


#4189

FromNarcis Garcia <debianlists@actiu.net>
Date2016-03-20 12:20 +0100
Message-ID<reJyN-65Q-7@gated-at.bofh.it>
In reply to#4187
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 "$@"
> 

[toc] | [prev] | [next] | [standalone]


#4192

FromAlex Muntada <alexm@caliu.cat>
Date2016-03-20 14:30 +0100
Message-ID<reLAB-7tR-5@gated-at.bofh.it>
In reply to#4177
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

[toc] | [prev] | [standalone]


Back to top | Article view | linux.debian.user.catalan


csiph-web