Script bash che agisce su 2 shell

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Script bash che agisce su 2 shell

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

Avatar utente
michelino
Staff
Staff
Messaggi: 871
Iscritto il: gio 21 dic 2006, 11:59
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)
Località: Foggia

Messaggio 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

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

Messaggio 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.

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Messaggio 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

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio 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&

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Messaggio 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.....

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Allora cambia VT="rxvt" con VT="xterm"

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

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

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio 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

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Messaggio 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

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

Messaggio 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.

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio 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.

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Messaggio 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ò?

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

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

Rispondi