Pagina 1 di 1

Script bash che agisce su 2 shell

Inviato: mer 31 ott 2007, 17:42
da mordecai
Salve a tutti!
Come da oggetto,vorrei realizzare uno script per shell,che ha quella caratteristica.
Quella caratteristica nasce dall'esigenza di vedere l'output necessariamente su 2 shell.
Praticamente se immetto 3 variabili:
read 1 read 2 read 3
echo "$1" && echo "$2" >>> operazione che occupa una shell (ad es. il comando top)
echo "$2" && echo "$3" >>> operazione che occupa una seconda shell

Praticamente tuttò ciò deve stare in un singolo script,per il semplice fatto che i parametri che passo,sono condivisi da entrambi i comandi.Ma si deve aprire magicamente una seconda shell,che esegue la seconda operazione in parallelo.

Avete una soluzione? (non mi dite di far 2 script :D )

Grazie in anticipo! ;)

Inviato: mer 31 ott 2007, 18:24
da michelino
Se ho capito quel che cerchi, e se non dico baggianate, le parentesi tonde avviano una sub-shell, quindi

Codice: Seleziona tutto

read 1 read 2 read 3
( echo "$1" && echo "$2" )
( echo "$2" && echo "$3" )
dovrebbe eseguire i due comandi in distinte sub-shell all'interno dello stesso script.
Chi ne sa di più batta un colpo :D :D :D

Inviato: mer 31 ott 2007, 18:52
da albatros
Io pensavo che forse volesse una cosa tipo:
prova.sh

Codice: Seleziona tutto

echo "Immetti tre variabili"
read uno
read due
read tre
rxvt -e ./prova2.sh $uno $due &
clear && echo "$due" && echo "$tre"
prova2.sh

Codice: Seleziona tutto

echo $1 && echo $2
read pippo
Dopo aver reso eseguibili prova.sh e prova2.sh dando:
./prova.sh
si dovrebbe ottenere più o meno quanto richiesto, facendo aprire una finestra con rxvt (penso intendesse questo con il visualizzare un'altra shell), il read in prova2.sh è per non farla chiudere subito.

Inviato: mer 31 ott 2007, 18:53
da mordecai
HO fatto cosi:

Codice: Seleziona tutto

echo "inserisci un comando"
read comando1
echo "inseriscine un altro"
read comando2
( "$comando1" )
( "$comando2" )
Come comando ho messo sempre top in entrambi i casi,ma non mi restituisce 2 shell,ma solo una con top.Come mai?

EDIT:ho notato che se faccio CTRL + C alla shell in cui appare top,non mi chiude top.In realtà me lo chiude,ma sotto ce ne sta subito un'altro :D :D :D
Bene siamo quasi giunti al traguardo.Ora voglio l'altro top,in un'altra shell ben distinta.

Grazie per la risposta! :D

Inviato: mer 31 ott 2007, 19:34
da gallows

Codice: Seleziona tutto

#!/bin/bash                                                                     

VT="rxvt"

_exec ()
{
    which $1 &> /dev/null

    if [ "$?" == 0 ]; then
        `$VT -e $1`
     else
        echo "$1: command not found"
    fi
}

echo -n "command #1: "
read c1
                                                                                
echo -n "command #2: "
read c2

_exec $c1&
_exec $c2&

Inviato: mer 31 ott 2007, 20:22
da mordecai
gallows ha scritto:

Codice: Seleziona tutto

#!/bin/bash                                                                     

VT="rxvt"

_exec ()
{
    which $1 &> /dev/null

    if [ "$?" == 0 ]; then
        `$VT -e $1`
     else
        echo "$1: command not found"
    fi
}

echo -n "command #1: "
read c1
                                                                                
echo -n "command #2: "
read c2

_exec $c1&
_exec $c2&
Bene.Penso lo script sia corretto...ma quando lo eseguo mi da:

Codice: Seleziona tutto

sh rxvt.sh
command #1: top
command #2: top
rxvt.sh: line 10: rxvt: command not found
rxvt.sh: line 10: rxvt: command not found
Evidentemente non è installato rxvt.....

Inviato: mer 31 ott 2007, 20:48
da gallows
Allora cambia VT="rxvt" con VT="xterm"

Inviato: mer 31 ott 2007, 21:10
da mordecai
gallows ha scritto:Allora cambia VT="rxvt" con VT="xterm"
SI ho installato rxvt e va.E se invece volessi più classicamente avere la normale konsole?
HO provato a mettere "sh" "/bin/bash" ma niente!
IN ogni caso va bene cosi! ;)

Inviato: mer 31 ott 2007, 21:24
da mordecai
Ah ecco approfitto per rompere le scatole con un ultima domanda.
Se volessi aprire un terzo terminale,quindi col comando _exec e non solo,volessi interagire con l'utente proprio col terzo terminale?
Ad esempio si aprono 2 terminali che visualizzano top e htop,e il terzo mi chiede "vuoi avviare top?" (esempio banale)
Quale sarebbe la sintassi in questo caso?Perchè ho provato,ma non mi stampa neanche l'output sul terzo schermo.HO fatto _exec echo -n "ciao" ma niente!

Grazie per la pazienza! ;)

Inviato: mer 31 ott 2007, 21:47
da Mario Vanoni
Domanda idiota, perche` sempre X11?

Standard 6 console diponibili.

Dalla prima top,
sulla seconda sar 1 0,
sulla terza quello che volete ...

Ctrl Alt F1 quello che dice top.
Ctrl Alt F2 quello che dice sar 1 0,
Ctrl Alt F3 quello che volevate ...

Perche` complicarsi tanto la vita con X11?

Mario Vanoni

Inviato: mer 31 ott 2007, 22:42
da mordecai
Mario Vanoni ha scritto:Domanda idiota, perche` sempre X11?

Standard 6 console diponibili.

Dalla prima top,
sulla seconda sar 1 0,
sulla terza quello che volete ...

Ctrl Alt F1 quello che dice top.
Ctrl Alt F2 quello che dice sar 1 0,
Ctrl Alt F3 quello che volevate ...

Perche` complicarsi tanto la vita con X11?

Mario Vanoni
I miei erano solo esempi banali.L'obiettivo di questo post è solo lo script

Inviato: mer 31 ott 2007, 23:12
da albatros
E se invece volessi più classicamente avere la normale konsole?
HO provato a mettere "sh" "/bin/bash" ma niente!
No, se hai dato /bin/bash hai aperto un'altra shell, ma ti verrà visualizzata nella stessa finestra di terminale.
Bash, che non è l'unica shell disponibile (es. csh), non è un emulatore di terminale e konsole è "normale" solo per chi usa kde, io ad esempio sotto X11 uso rxvt di solito.

Inviato: mer 31 ott 2007, 23:26
da gallows
mordecai ha scritto:Ah ecco approfitto per rompere le scatole con un ultima domanda.
Se volessi aprire un terzo terminale,quindi col comando _exec e non solo,volessi interagire con l'utente proprio col terzo terminale?
Ad esempio si aprono 2 terminali che visualizzano top e htop,e il terzo mi chiede "vuoi avviare top?" (esempio banale)
Quale sarebbe la sintassi in questo caso?Perchè ho provato,ma non mi stampa neanche l'output sul terzo schermo.HO fatto _exec echo -n "ciao" ma niente!

Grazie per la pazienza! ;)
echo -n "ciao" viene stampato, solo che uscendo subito dopo non lo vedi neanche...

http://tldp.org/LDP/abs/html/ per maggiori informazioni sullo scripting di bash, anche se prima dovresti capire cos'è il terminale e cos'è la shell.

Inviato: gio 1 nov 2007, 10:39
da mordecai
Grazie per la risposta!In ogni caso,quel manuale penso di averlo in italiano e primao poi dovrò ingoiarlo tutto! :D
Un ultima cosa:ho provato anche un altro comando come
iwconfig "$eth" ap "$macaddress"
Volevo fare per prova uno script che automatizza l'associazione al router.IL problema è che la varibile "$macaddress" non accetta il mac.Evidentemente in quella variabile non posso mettere " : ".Ci sarebbe un modo per ovviare a ciò?

Inviato: gio 1 nov 2007, 11:20
da albatros
:?:

Codice: Seleziona tutto

mac=$(ifconfig | grep HWaddr | awk '{ print $5 }')

echo $mac
00:11:DD:AA:EE:55
Ma come le assegni le variabili?
Non è che magari da qualche parte fai confusione con l'$ o con le " " ?

(Nota: nella risposta ho cambiato le cifre del mac lasciando inalterata la formattazione, l'output non è pertanto quello reale che ho ottenuto)