.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Tech (http://www.dsy.it/forum/forumdisplay.php?forumid=189)
-- [Misteri] -e si nasconde (http://www.dsy.it/forum/showthread.php?threadid=21078)


Posted by lallyblue on 26-08-2005 13:53:

[Misteri] -e si nasconde

Ciao!
questa di oggi proprio mi lascia senza parole... spero davvero che qcuno mi chiarisca il mistero... :pensa:

se assegno ad una variabile pippo il valore '-e' non c'è santo che tenga, ma echo non la visualizza... :shock:
perché?

mi spiego meglio:

code:
[root@lab0204 root]# pippo=-q [root@lab0204 root]# echo $pippo -q [root@lab0204 root]# pippo=-e [root@lab0204 root]# echo $pippo [root@lab0204 root]#


ho provato anche con apici, virgolette, lo slash davanti al meno...
ma niente, non stampa nulla...
come mai? come posso risolvere?
grazie in anticipo!

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 13:58:

Cambia shell
usi la bash ?

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 26-08-2005 13:58:

altra cosa...
io ho bisogno di controllare se un'opzione, passata come argomento di uno script, fa parte di un certo range di opzioni possibili.
X chiarire meglio, l'opzione può essere una tra le seguenti:
-e
-q
-ue
-uq
mi è venuto spontaneo pensare alle regexp e da quanto ho capito la sintassi dovrebbe essere qcosa del genere
/-u?[eq] /
eppure non c'è modo di passarlo come argomento di un grep
anche qui, ho provato con egrep, con grep -P, grep -e e tante altre...ma non c'è verso...
l'unica che funziona ma non come mi serve è
-u*[eq]
che però accetta anche -uuuue o -uuq
se non metto la stellina non accetta i semplici -e e -q
come diavolo faccio?!?!

tnx!!

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by lallyblue on 26-08-2005 13:59:

sì sto usando la bash
ma non capisco dove sbaglio... :roll:

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 14:04:

Originally posted by lallyblue
sì sto usando la bash
ma non capisco dove sbaglio... :roll:


Non credo sia un errore ...
Forse nella bash -e e' qualcosa di particolare .. pero non so ...


Per l'altra domanda ...
Non puoi usare case ?

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by jdhoring on 26-08-2005 14:05:

Hai provato

pippo=\"-e\"
echo $pippo

?

__________________
Furbo è colui che è molto bravo a togliersi da quei guai in cui il saggio non si sarebbe mai cacciato

Il bravo motociclista è come un buon amante: ha equilibrio, giudizio e tempismo.

Nessuna forma d'amore ha tanto rispetto per la libertà dell'altro come l'amicizia.


Posted by Alf on 26-08-2005 14:11:

Originally posted by jdhoring
Hai provato

pippo=\"-e\"
echo $pippo

?


ma cosi' ritornera' \"-e\" non -e

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 26-08-2005 14:12:

@alf boh, mi sembrava + sensato usare le regexp visto che (in teoria) era molto + banale... se solo non facesse le bizze...

@jd: mi stampa "-e" (anche con gli apici) che purtroppo non è cmq quello che mi serve :\

ah non va nemmeno se faccio semplicemente "echo -e" :(

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 14:16:

Originally posted by lallyblue
@alf boh, mi sembrava + sensato usare le regexp visto che (in teoria) era molto + banale... se solo non facesse le bizze...

@jd: mi stampa "-e" (anche con gli apici) che purtroppo non è cmq quello che mi serve :\

ah non va nemmeno se faccio semplicemente "echo -e" :(


Ehmm lally credo sia un opzione del echo .. ma non dirti quale .. :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by Alf on 26-08-2005 14:18:

Originally posted by Alf
Ehmm lally credo sia un opzione del echo .. ma non dirti quale .. :)


Ah ecco .. sul man in linea non lo dava.



Echo the STRING(s) to standard output.

-n do not output the trailing newline

-e enable interpretation of the backslash-escaped characters listed
below

-E disable interpretation of those sequences in STRINGs



Percio di -e -E -n non puoi fare l'echo

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by jdhoring on 26-08-2005 14:20:

ma no... echo non ci deve nemmeno arrivare a valutare il -e

provato con

echo "-e"
echo \-e

?

__________________
Furbo è colui che è molto bravo a togliersi da quei guai in cui il saggio non si sarebbe mai cacciato

Il bravo motociclista è come un buon amante: ha equilibrio, giudizio e tempismo.

Nessuna forma d'amore ha tanto rispetto per la libertà dell'altro come l'amicizia.


Posted by ak47 on 26-08-2005 14:21:

dunque, il motivo per cui non visulizza il -e non è perche non la memorizza nella variabile $a (ad esempio), ma perche applica il flag -e al comando echo... quindi se quel -e ($a) ti serve in uno script di shell puoi usarlo tranquillamente.....
la RE che soddisfa la tua richiesta è [-e|-q|-ue|-uq]

Saluti

__________________
"The POP3 server service depends on the SMTP server service, which failed to start because of the following error: The operation completed successfully." (Windows NT Server v3.51)


Posted by jdhoring on 26-08-2005 14:21:

Su Solaris 9, Korn shell

$ pippo="-e"
$ echo $pippo
-e

__________________
Furbo è colui che è molto bravo a togliersi da quei guai in cui il saggio non si sarebbe mai cacciato

Il bravo motociclista è come un buon amante: ha equilibrio, giudizio e tempismo.

Nessuna forma d'amore ha tanto rispetto per la libertà dell'altro come l'amicizia.


Posted by Alf on 26-08-2005 14:24:

Originally posted by jdhoring
ma no... echo non ci deve nemmeno arrivare a valutare il -e

provato con

echo "-e"
echo \-e

?


Con la bash ??
Il problema lo da solo con la bash JD!

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by Alf on 26-08-2005 14:25:

Originally posted by ak47
dunque, il motivo per cui non visulizza il -e non è perche non la memorizza nella variabile $a (ad esempio), ma perche applica il flag -e al comando echo... quindi se quel -e ($a) ti serve in uno script di shell puoi usarlo tranquillamente.....
la RE che soddisfa la tua richiesta è [-e|-q|-ue|-uq]

Saluti


Esatto come dicevo nello stralcio dell'help :)

Boh io avrei fatto cosi'

case "$1" in

"-e"|"-q"|"-u"|"-uq")
command
command

;;
esac


:)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by Alf on 26-08-2005 14:36:

Ah ultima cosa lally se il problema e' proprio "stampare SOLO -e " ho una soluzione anche se non e' il massimo :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 26-08-2005 14:39:

tipo?

io semplicemente facevo un
if echo $variabile | grep <regexp>
then
command
else
command
fi

boh mi sembrava la soluzione +semplice... :\

si può adattare?

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 14:43:

Originally posted by lallyblue
tipo?

io semplicemente facevo un
if echo $variabile | grep <regexp>
then
command
else
command
fi

boh mi sembrava la soluzione +semplice... :\

si può adattare?


con il case:


case "$variabile" in

"-e"|"-q"|"-u"|"-uq")
command1
command2
;;

*)
command3

;;
esac


Se il valore $variabile si trova fra -e -q -u -uq esegue i comandi command1 command2 in tutti gli altri casi (*) esegue command 3


per STAMPARE -e fai cosi' ...

echo \"-e\" | cut -c2,3


Non e' bellissimo ... ma funziona :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by DeepBlue on 26-08-2005 14:45:

Originally posted by ak47
la RE che soddisfa la tua richiesta è [-e|-q|-ue|-uq]


in bash con *grep mi sa che così non funziona.

Meglio che passi tutto a egrep così:

code:
egrep "(^-)(e|q|ue|uq)"


Per il problema del -e..boh?

edit: anche io avevo pensato ad una soluzione simile a quella di alf (per l'assegnamento di -e) e mi sa che è l'unica strada, a meno di sostituire -e con qualcosaltro :D:D:D

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by lallyblue on 26-08-2005 14:59:

l'opzione purtroppo non posso cambiarla, è quella che devo passare ad un programma x avere un certo risultato.
a questo punto userò l'egrep che mi hai suggerito, solo mi suonava strano che un comando come echo avesse tali limitazioni...
non c'è un comando alternativo all'echo x mostrare il contenuto delle variabili, vero?

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 15:06:

Originally posted by DeepBlue
in bash con *grep mi sa che così non funziona.

Meglio che passi tutto a egrep così:

code:
egrep "(^-)(e|q|ue|uq)"


Per il problema del -e..boh?

edit: anche io avevo pensato ad una soluzione simile a quella di alf (per l'assegnamento di -e) e mi sa che è l'unica strada, a meno di sostituire -e con qualcosaltro :D:D:D


ma scusa ... fare un if in pipe a un egrep e' simulare un case ... O_o;; perche' simularlo quando c'e' ?! :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 26-08-2005 15:11:

beh perché di solito il case lo applico quando ho tante opzioni e diventerebbe difficile usare tanti if/then/else in cascata. visto che qui o l'opzione è tra quelle 4 (e allora esegue il comando) oppure è qualsiasi altra cosa (e allora stampa un mex d'errore) mi sembrava + logico usare un if/then/else... ma non sono una buona programmatrice quindi è facile che mi sbagli... ;)

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by DeepBlue on 26-08-2005 15:14:

Originally posted by lallyblue
non c'è un comando alternativo all'echo x mostrare il contenuto delle variabili, vero?

ho paura di no :/

Originally posted by Alf
ma scusa ... fare un if in pipe a un egrep e' simulare un case ... O_o;; perche' simularlo quando c'e' ?!

E che ne so io? :D
Lally era partita dicendo che stava usando grep ed egrep, io non sapendo su cosa stesse lavorando, mi sono adeguato :D

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by Alf on 26-08-2005 15:28:

Originally posted by lallyblue
beh perché di solito il case lo applico quando ho tante opzioni e diventerebbe difficile usare tanti if/then/else in cascata. visto che qui o l'opzione è tra quelle 4 (e allora esegue il comando) oppure è qualsiasi altra cosa (e allora stampa un mex d'errore) mi sembrava + logico usare un if/then/else... ma non sono una buona programmatrice quindi è facile che mi sbagli... ;)


Beh sono equivalenti alla fine.

E cmq questo e' il caso in cui hai piu' scelte .. il fatto che 4 scelte facciano fare la stessa azione e' irrilevante :)

Cmq dentro l'if devi richiamare il grep :)

Il case lo fa da solo il parsing

Cmq alla fine sta a te decidere ;)



Ci sono altri comandi al posto dell'echo ma danno tutti lo stesso problema

Printf per esempio :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 26-08-2005 16:17:

fico... :roll:

grazie mille cmq!

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 26-08-2005 16:34:

Originally posted by lallyblue
fico... :roll:

grazie mille cmq!


Anzi no ..
Ti ho trovato la soluzione

code:
pippo=-e printf "%s\n" $pippo


Cosi' stampa tutto cio' che vuoi :D

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by DeepBlue on 26-08-2005 17:20:

grande Alf :D

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by Viry on 26-08-2005 17:26:

Senza diventare matti, c'e' getopts per fare cio':
Nell'esempio lo script accetta le opzioni -h -a -b -c

code:
while getopts "habc" opt; do case $opt in h ) visualizzo_help ;; a) eseguo_una_cosa;; b ) faccio_altra_cosa;; .... esac done

Molto piu' comodo, no?
Qui la man page:
http://www.ss64.com/bash/getopts.html
e un po' di esempietti:
http://www.linuxlaboratory.org/27.php

__________________
When once you have tasted flight, you will walk the earth, forever more, with your eyes turned skyward. For there you have been, and there you long to return.

“Dovere, tempo, destino, tutto tende a separarci e, di fatto, ci separa. Ma il sentimento non conosce frontiere e mi unisce a te come se avessi sempre la mia mano sulla tua"


Posted by Viry on 26-08-2005 17:40:

In ogni caso, per controllare su una stringa e' uguale a un'altra, si usa if test:
in questo caso voglio che lo script dice gatto se lanciato con -e

code:
if test $1 = "-e"; then echo "gatto"; fi


viry@nocciolina ~ $ sh prova.sh -e
gatto
viry@nocciolina ~ $ sh prova.sh -i
viry@nocciolina ~ $

__________________
When once you have tasted flight, you will walk the earth, forever more, with your eyes turned skyward. For there you have been, and there you long to return.

“Dovere, tempo, destino, tutto tende a separarci e, di fatto, ci separa. Ma il sentimento non conosce frontiere e mi unisce a te come se avessi sempre la mia mano sulla tua"


Posted by lallyblue on 29-08-2005 18:53:

Originally posted by Viry
Senza diventare matti, c'e' getopts per fare cio':
Nell'esempio lo script accetta le opzioni -h -a -b -c
code:
while getopts "habc" opt; do case $opt in h ) visualizzo_help ;; a) eseguo_una_cosa;; b ) faccio_altra_cosa;; .... esac done

Molto piu' comodo, no?
Qui la man page:
http://www.ss64.com/bash/getopts.html
e un po' di esempietti:
http://www.linuxlaboratory.org/27.php


x curiosità: ma questo funziona anche quando ho opzioni tipo -ue, -uq ovvero con + lettere assieme? (sì so che -ue è come dire -u -e ma se l'utente inserisce -ue non va + bene x lo script, giusto? )

cmq lo tengo presente x la prossima occasione... x questa volta ho risolto con il case, effettivamente è quello che rende meglio :)

ora sto litigando un po' con il grep...
dal man mi sembra di aver capito che basta usare anche qui le regexp...
diciamo che ho un file "file.txt" che contiene una riga con "ciao pippo blah blah" e un'altra riga con "www.pippo.pip"
con il comando
cat file.txt | egrep \<pippo\>
mi aspetto di trovare solo la riga relativa a "ciao pippo blah blah" ovvero solo quella contornata da spazi, giusto?
ho provato anche \bpippo\b..
ma in entrambi i casi mi stampa entrambe le righe... ma se voglio la stringa esatta, contornata da spazi, che devo fa?!? :pensa:
tnxtnx!

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Viry on 29-08-2005 22:47:

Usa le virgolette: grep " pippo "

__________________
When once you have tasted flight, you will walk the earth, forever more, with your eyes turned skyward. For there you have been, and there you long to return.

“Dovere, tempo, destino, tutto tende a separarci e, di fatto, ci separa. Ma il sentimento non conosce frontiere e mi unisce a te come se avessi sempre la mia mano sulla tua"


Posted by lallyblue on 30-08-2005 13:32:

dhò...
ero convinta di averlo già provato invano... e invece funzia! ;)

ok... dai dai, altro quesito :D

ho un output di un comando che suona + o - così:

code:
FIELDNAME1 FIELDNAME2 FIELDNAME3 ... FIELDNAMEn value1 value2 value3 ... valuen ... ... ... ... ... OTHERFN1 OTHERFN2 ... value value value .... .... ...


e mi servono solo le righe della prima tabella, esclusi i titoli e la riga bianca tra le 2 tabelle...
finora ho usato l'awk:
comando | awk '/FIELDNAME1/, /$^/ {print $2}' | grep -v FIELDNAME1
il che però mi lascia ancora la riga vuota :roll:
qualche soluzione + elegante/efficente?

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by DeepBlue on 30-08-2005 13:34:

semplicemente

comando | cut -d " " -f 1

Fra le virgolette dopo il -d metti \t se i campi sono separati da tabulatori ;)

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by Alf on 30-08-2005 13:37:

Il comando che comando e' ?

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 30-08-2005 13:59:

ehm... io vorrei avere solo i valori della prima tabella... niente titoli né valori della seconda tabella...
ho provato il cut ma non va bene... mi stampa tutti i titoli e i valori della seconda tabella...

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by lallyblue on 30-08-2005 14:11:

@alf, non è un comando di bash, è un comando di un sw che utilizzo...

tra l'altro, non ho specificato, ma i valori all'interno della tabella possono cambiare, mentre i titoli son sempre quelli.
inoltre anche il numero di righe della tabella è variabile...

l'awk mi funziona, solo che mi include i 2 estremi (la prima e l'ultima riga indicate nello script) mentre io le voglio escludere...

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 30-08-2005 14:33:

Si' volevo sapere quello.
E' un comando che dai e lui ti da in output il formato che hai scritto ?

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by DeepBlue on 30-08-2005 14:35:

Originally posted by lallyblue
ehm... io vorrei avere solo i valori della prima tabella... niente titoli né valori della seconda tabella...
ho provato il cut ma non va bene... mi stampa tutti i titoli e i valori della seconda tabella...

Scusa, hai ragione, non avevo letto bene e avevo capito che ti serviva solo la prima colonna (così imparo a postare dal lavoro :D).

Ci penso e ti faccio sapere.

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by lallyblue on 30-08-2005 14:59:

Originally posted by Alf
Si' volevo sapere quello.
E' un comando che dai e lui ti da in output il formato che hai scritto ?

esatto

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by DeepBlue on 30-08-2005 15:07:

Allora, con questo:

code:
comando |tr -d "\n"| sed s/OTHERFN1/\\nOTHERFN1/ | grep FIELDNAME1


dovresto ottenere questo:

FIELDNAME1 FIELDNAME2 FIELDNAME3 value1 value2 value3

Da li, dovresti ottnere più o meno facilmente quello che ti serve

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by lallyblue on 30-08-2005 15:16:

uhm...
direi di no... mi servono incolonnati come sono...

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by lallyblue on 30-08-2005 15:39:

molto semplicemente, con il comando che ho incollato sopra ottengo una cosa di questo genere:

code:
----- FIELDNAMEx FIELDNAMEy valuea valuepippo valueb valuepluto valuec valueciccio ... ... valuez valuepaperone ----

(trattini esclusi)
quello che vorrei ottenere è la stessa cosa ma senza intestazione e senza la riga vuota in fondo...
purtroppo con awk non riesco a combinare la selezione del blocco tra FIELDNAME1 e la riga vuota con il fatto che non voglio le 2 righe in questione...
in pratica fa una selezione estremi inclusi, mentre a me serve estremi esclusi...
grazie cmq :)

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by DeepBlue on 30-08-2005 15:41:

Originally posted by lallyblue
uhm...
direi di no... mi servono incolonnati come sono...


:D che pretese! :D

ok, fai così allora:

code:
comando |tr "\n" "@@@" | sed s/OTHERFN1/\\n\\nOTHERFN1/ | grep FIELDNAME1 | tr "@@@" "\n"|grep -v FIELDNAME1


Non è elegante, ma funziona :D

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by lallyblue on 31-08-2005 11:50:

bene, quesito del giorno...
continuo qui xché riguarda sempre lo stesso script (chiamiamolo script.sh)...
(poi semmai splitto...)
ho la necessità di lanciare i comandi dello script da remoto, e pensavo di usare ssh
quindi ho creato un nuovo script, remotescript.sh ed ho 'inglobato' il codice dello script in questo:

code:
ssh nodename " ... <codice script> ... "


il problema è che quando lancio remotescript.sh, ssh mi va a leggere le variabili d'ambiente della macchina da cui lancio questo script e non quelle della macchina remota... questo mi causa non pochi problemi visto che la var PATH è diversa...

queste prove le prove che ho fatto:

- creato un file prova.sh e ci ho scritto dentro ssh nodename "echo $PATH"
- creato un file prova.sh e ci ho scritto dentro ssh nodename echo $PATH
--> queste 2 mi hanno stampato il PATH della macchina locale (quella d'ambiente)

- creato un file prova.sh e ci ho scritto dentro ssh nodename 'echo $PATH'
--> questa mi ha stampato il PATH dello user della macchina locale


l'unico modo x ora che ho trovato x avere la path della macchina remota è collegarmi e solo dopo, quando mi viene proposto il prompt, faccio echo $PATH.
però questo non posso farlo nello script

idee?

grazie mille!! :)

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by DeepBlue on 31-08-2005 11:55:

Originally posted by lallyblue
l'unico modo x ora che ho trovato x avere la path della macchina remota è collegarmi e solo dopo, quando mi viene proposto il prompt, faccio echo $PATH.

AFAIK, è l'unico modo possibile, ma prova a chiedere in giro.

PS: la riga che ho postato ieri ha poi funzionato?

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by giulio on 31-08-2005 13:29:

Originally posted by lallyblue
l'unico modo x ora che ho trovato x avere la path della macchina remota è collegarmi e solo dopo, quando mi viene proposto il prompt, faccio echo $PATH.
però questo non posso farlo nello script

idee?



ssh pippo.somewhere.net "echo \$PATH"

altrimenti la variabile $PATH viene valutata (e quindi il suo contenuto viene sostituito nella riga) prima di essere passata al
comando ssh.


Posted by lallyblue on 31-08-2005 13:35:

funziona!!! ma grande Giulio!! :lode:

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by lallyblue on 31-08-2005 13:59:

scusate se vi assillo, ma qui è tutta una catena di casini...risolvo uno e ne salta fuori un'altro... :|

a quanto pare devo usare sì il backslash, ma non basta, devo anche fare "su -" se no mi prende il $PATH sì ma non quello giusto (prende quello dello user... (?) )

quindi ora avrei una situazione di questo genere:
ssh nodename "su - -c comando1
comando 2
comando 3
...
comando n"
peccato che in questo modo prende le var. d'ambiente giuste solo il comando sulla prima riga...
come faccio a renderlo x tutti i comandi?
ho provato a mandare a capo dopo su -
ma mi resta lì senza dare segni di vita...
:help:

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by giulio on 31-08-2005 14:03:

Originally posted by lallyblue
scusate se vi assillo, ma qui è tutta una catena di casini...risolvo uno e ne salta fuori un'altro... :|

a quanto pare devo usare sì il backslash, ma non basta, devo anche fare "su -" se no mi prende il $PATH sì ma non quello giusto (prende quello dello user... (?) )

quindi ora avrei una situazione di questo genere:
ssh nodename "su - -c comando1
comando 2
comando 3
...
comando n"



ssh root@pippo.somewhere.net "echo \$PATH; comando1; comando2 ; comando3"

i comandi (nel caso fossero script) devono essere sulla macchina remota.


Posted by Alf on 31-08-2005 14:03:

Posso darti un consiglio ?

host remoto= HostA
host da cui operare = HostB

script sull' hostremoto : /usr/script/script.sh

HostB> ssh HostA /usr/scrit/script.sh

Invece di passargli il codice dello script passi il path dello script da lanciare. ;)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by Alf on 31-08-2005 14:04:

Originally posted by giulio
ssh root@pippo.somewhere.net "echo \$PATH; comando1; comando2 ; comando3"

i comandi (nel caso fossero script) devono essere sulla macchina
remota.


Esatto mi sa che lui vuole passare il codice dello script con l'ssh invece di eseguire lo script direttamente :)

Cosi' mi pare di aver capito :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by giulio on 31-08-2005 14:10:

Originally posted by Alf
Esatto mi sa che lui vuole passare il codice dello script con l'ssh invece di eseguire lo script direttamente :)

Cosi' mi pare di aver capito :)


Vogliamo esagerare?

Se lo script e' sulla macchina locale e si chiama script.sh puoi fare:

ssh root@pippo.somewhere.net "$(cat script.sh)"


Posted by Alf on 31-08-2005 14:20:

Originally posted by giulio
Vogliamo esagerare?

Se lo script e' sulla macchina locale e si chiama script.sh puoi fare:

ssh root@pippo.somewhere.net "$(cat script.sh)"


Oh certo :)
Pero' se lo deve usare sull'altra macchina ha piu' senso che sia li' no ? :)

Comunque credo che siano tutte cose utili che a lallyblue interessano :D anche se sono esagerazioni :)
No ? :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 31-08-2005 14:29:

:oops:
ok, ora mi mettete nell'imbarazzo della scelta... :D

qual è la soluzione migliore? la + sicura, efficace, efficiente, prestante... boh...
in base a cosa devo scegliere una soluzione +ttosto che un'altra?
grazie mille raga!! :)

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 31-08-2005 14:37:

Boh secondo me ha senso che se lo script deve girare solo sul server remoto e' il caso che si trovi li' sopra.
L'altro serve semplicemente per eseguirlo via ssh.

Cio' vuol dire che puoi collegarti da un server C e fare la stessa cosa
scrivendo solo

>ssh hostnameremoto /usr/script/script.sh

Senza doverti ricordare tutto lo script o scrivertelo ovunque :)

:)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 31-08-2005 14:38:

Originally posted by giulio
ssh root@pippo.somewhere.net "echo \$PATH; comando1; comando2 ; comando3"

i comandi (nel caso fossero script) devono essere sulla macchina remota.


uhm... ho provato ma non va...
devo per forza aggiungere "su - -c "
e a quel punto già alla seconda riga non usa + le variabili d'amb. corrette...

la sintassi che uso è questa (all'interno di un remotescript.sh)

#!/bin/bash
ssh nodename "su - -c comando 1;
comando 2;
comando 3;
...
comando n"

dove sbaglio?

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by giulio on 31-08-2005 14:43:

Originally posted by lallyblue
uhm... ho provato ma non va...
devo per forza aggiungere "su - -c "
e a quel punto già alla seconda riga non usa + le variabili d'amb. corrette...

la sintassi che uso è questa (all'interno di un remotescript.sh)

#!/bin/bash
ssh nodename "su - -c comando 1;
comando 2;
comando 3;
...
comando n"

dove sbaglio?


Sbagli nel volerti autenticare due volte. Se fai ssh root@nodename, non c'e' piu' bisogno di "su".
Ricapitolo:
se lo script e' locale:

ssh root@nodename "$(cat script.sh)"

se lo script e' remoto:

ssh root@nodename "script.sh"

e togli la riga con "su" dallo script, ovunque esso si trovi, lasciando solo l'elenco dei comandi separati da \n (invio).


Posted by Alf on 31-08-2005 14:43:

Ehmmm ogni riga divisa da ; la esegue come comando a parte
Dovresti mettere davanti a tutti su - -c ...
Un po' complicata come cosa .. :)

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by lallyblue on 31-08-2005 15:14:

@giulio: ho provato come dici (script locale da eseguire su macchina remota) ma non trova il path della macchina remota.
sulla macchina remota c'è installato un sw del quale nello script eseguo dei comandi.
naturalmente sulla macchina locale questo programma non c'è.
come conseguenza non riesce eseguire i comandi perché non son nel path...
(scusa la contortaggine... ;) )

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by giulio on 31-08-2005 15:34:

Originally posted by Alf
Ehmmm ogni riga divisa da ; la esegue come comando a parte
Dovresti mettere davanti a tutti su - -c ...
Un po' complicata come cosa .. :)


nope:


[root@ghost root]# su - -c "ls -ld /tmp; ls -ld /tmp"
drwxrwxrwt 12 root root 69632 Aug 31 04:02 /tmp
drwxrwxrwt 12 root root 69632 Aug 31 04:02 /tmp

[root@ghost root]# uname -a
Linux ghost 2.6.12.5 #1 SMP Wed Aug 24 16:28:49 CEST 2005 i686 i686 i386 GNU/Linux


Posted by Alf on 31-08-2005 15:37:

A maggior ragione metti lo script direttamente sulla macchina remota.
E poi su quella locale fai ssh hostremoto "pathscript/script"

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by giulio on 31-08-2005 15:40:

Originally posted by lallyblue
@giulio: ho provato come dici (script locale da eseguire su macchina remota) ma non trova il path della macchina remota.
sulla macchina remota c'è installato un sw del quale nello script eseguo dei comandi.
naturalmente sulla macchina locale questo programma non c'è.
come conseguenza non riesce eseguire i comandi perché non son nel path...
(scusa la contortaggine... ;) )


Forse non ho capito molto bene il problema.
Diciamo che ho uno script script.sh sulla macchina locale fatto cosi':

code:
#!/bin/sh comando1 comando2 comando3 comando4


e faccio:

ssh root@macchinaremota "$cat(script.sh)"

la cosa funziona.
NON serve usare su!

Se non trova i comandi perche' non sono nel path basta modificare lo script sulla macchina locale in questo modo:

code:
#!/bin/sh export PATH=/una/dir/alquanto/strana:$PATH comando1 comando2 comando3 comando4


Posted by lallyblue on 31-08-2005 15:42:

@alf: sì in quel modo funziona, ma volevo tentare di farlo anche da remoto...
finora mi collegavo in ssh e poi lo eseguivo sulla macchina remota. ma pensavo fosse possibile lanciarlo direttamente da remoto via ssh...

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by giulio on 31-08-2005 15:47:

Originally posted by lallyblue
@alf: sì in quel modo funziona, ma volevo tentare di farlo anche da remoto...
finora mi collegavo in ssh e poi lo eseguivo sulla macchina remota. ma pensavo fosse possibile lanciarlo direttamente da remoto via ssh...


Forse non ti seguo....
Se fai come ho detto nell'ultimo post lo lanci direttamente da
remoto via ssh.
Per avere una terminologia comune la macchina locale e' quella su cui tu hai una shell aperta, mentre la macchina remota e' quella dove c'e' il software strano.


Posted by Alf on 31-08-2005 15:48:

Originally posted by lallyblue
@alf: sì in quel modo funziona, ma volevo tentare di farlo anche da remoto...
finora mi collegavo in ssh e poi lo eseguivo sulla macchina remota. ma pensavo fosse possibile lanciarlo direttamente da remoto via ssh...


Scusa la differenza ?!
A parte quella concettuale ....

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


Posted by DeepBlue on 31-08-2005 15:51:

Off-Topic:
bello 'sto thread!

__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~


Posted by lallyblue on 31-08-2005 15:55:

concordo sulla terminologia...
la script è salvata sia in locale che in remoto.
se faccio
ssh nodename [invio]
e poi lancio la script, questa funziona regolarmente

ma se voglio dare un comando unico su una sola riga, facendo come dici tu[ssh root@nodename "$(cat script.sh)"] , mi dà quel problema...

cmq boh, ora devo scappare se no perdo il treno... riprendo il tutto lunedì :)
magari nel frattempo provo a cercare qualche buon tutorial a riguardo...anzi, se ne avete qualcuno da consigliarmi, è il benvenuto!

Grazie mille a tutti x l'aiuto! :)

:ciaoo:

__________________
*** Proposta di legge di iniziativa popolare: "8x1000 ALLA RICERCA"
Informati e firma la petizione! E' nel tuo interesse! ;)

*** Browse my dA gallery ! ;)
***In medio stat virtus


Posted by Alf on 31-08-2005 16:02:

Originally posted by lallyblue
concordo sulla terminologia...
la script è salvata sia in locale che in remoto.
se faccio
ssh nodename [invio]
e poi lancio la script, questa funziona regolarmente

ma se voglio dare un comando unico su una sola riga, facendo come dici tu[ssh root@nodename "$(cat script.sh)"] , mi dà quel problema...

cmq boh, ora devo scappare se no perdo il treno... riprendo il tutto lunedì :)
magari nel frattempo provo a cercare qualche buon tutorial a riguardo...anzi, se ne avete qualcuno da consigliarmi, è il benvenuto!

Grazie mille a tutti x l'aiuto! :)

:ciaoo:


Non ho mai detto di fare

ssh nodename [invio]
e poi lancio la script,


Ho detto:
ssh nodename pathscript/script [invio]


In pratica il comando che dai e' "lancia lo script sulla macchina remota" invece che "codice dello script"

__________________
(\ /)
( . .)
c('')('') This is Bunny!
Help her succeed in world domination by copy and pasting her in
your signature.


All times are GMT. The time now is 17:40.
Show all 68 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.