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

)
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

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
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
Bene siamo quasi giunti al traguardo.Ora voglio l'altro top,in un'altra shell ben distinta.
Grazie per la risposta!

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!
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)