Vai al contenuto

Richiesta Comando Per Script


Vinzo

Messaggi raccomandati

Buonasera ragazzi, intanto vi ringrazio dei servizi che fornite perchè devo dire che spesso sono riuscito ad attingere a tanti suggerimenti pur non essendo iscritto. Ora però mi serve qualcosa che credo non ci sia per cui eccomi a scrivere :) .

Dunque programmo all'università e avrei la necessità di crere un file bash per eseguire vari comandi e ognuno di questi comandi deve aprire un terminale e fargli eseguire il determinato comando (es. ./prova eseguito su terminale dovrebbe aprire un terminale che esegua il comando javac Classe1.java ecc.. e un altro terminale che esegua javac Classe2.java ecc..) come potrei scrivere queste istruzioni? Grazie in anticipo!

Link al commento
Condividi su altri siti

Stavo per risponderti una cosa del tipo "ma cosa diavolo potrà mai servire fare una cosa del genere... " LOL. Poi mi sono detto "le università fanno tante richieste assurde... e poi potrebbe anche essere interessante"...

Premetto che non ci ho perso tanto tempo quindi ci potrebbero essere modi più efficaci ma credo di avere una soluzione al tuo problema.

 

per aprire un altro terminale basta:

open -a Terminal .

 

quindi

prima di tutto creiamo un sh eseguibile (per renderlo eseguibile ti ricordo il comando: chmod u+x script.sh):

#!/bin/bash
open -a Terminal script2.sh
open -a Terminal script3.sh

puoi aggiungere quanti script vuoi da eseguire ma devono essere tutti nella stessa cartella.

 

ogni script al suo interno avrà la linea che vuoi eseguire (esempio script2.sh):

#!/bin/bash
echo "ciao"

script3.sh:

#!/bin/bash
echo "come va?"

il risultato è che eseguendo solo script.sh (comando: ./script.sh) vengono eseguiti tutti gli scriptn.sh contenuti all'interno di script.sh ognuno in un terminale nuovo.

 

Forse la soluzione potrebbe essere ancora più semplice se al posto di eseguire un scriptn.sh si potesse eseguire direttamente il comando contenuto al suo interno, ma non sono riuscito a capire come fare (ci sono delle soluzioni online per il terminale di gnome ma non ho trovato niente di immediato e multipiattaforma legato solo alla bash).

 

Spero comunque che la mia soluzione sia sufficiente (o ti dia un indizio... in caso riesci a trovare una soluzione migliore ricordati di postarla qui).

Link al commento
Condividi su altri siti

Ciao innanzitutto grazie per la risposta! Per quanto riguarda il comando, devo dire che avevo gia provato con open -a Terminal, il problema è che non mi succede proprio nulla e non apre alcun terminale..anche provando a creare i medesimi file creati da te idem..quando eseguo mi resta solo una finestra di terminale. Per testare che non avessi commesso errori ho provato a fare cosi:

#!/bin/bash

open -a Terminal script2.sh
open -a Terminal script3.sh
echo “Hello Worldâ€
ed eseguendo su terminale ./prova.sh mi appare solo la scritta Hello World..non so come possa essere,ma i terminali non me li apre e non crea i comandi su quelli..Se avete altri consigli vi ringrazio!
Link al commento
Condividi su altri siti

Beh non mi da errore, ma non mi apre nessun terminale, a te si?

si a me apre un'altra finestra del terminale.

 

PS. sicuro di aver settato la bash?

 

PS2. questa ti funziona?

open -a iBooks

ti apre l'applicatione iBooks?

Link al commento
Condividi su altri siti

 

 

 

si a me apre un'altra finestra del terminale.

 

PS. sicuro di aver settato la bash?

 

PS2. questa ti funziona?

open -a iBooks

ti apre l'applicatione iBooks?

 

Si si, apre iBooks senza problemi, invece con Terminal va semplicemente a capo non aprendone una nuova..

Link al commento
Condividi su altri siti

Probabilmente devi andare in preferenze di sistema, tastiera, scorciatoie, servizi e abilitare la voce terminale.

Sto andando a memoria e le voci potrebbero essere un po' diverse....

Ho provato a guardarci ma anche provando a selezionare ciò che nomina il terminale non funziona..

Link al commento
Condividi su altri siti

Si si, apre iBooks senza problemi, invece con Terminal va semplicemente a capo non aprendone una nuova..

 

ho fatto una piccola prova e forse ho capito qual'è il problema... tutti gli script devono essere eseguibili.

chmod u+x script.sh

non è sufficiente (a meno che non crei gli altri con copia-incolla dopo aver reso script.sh eseguibile).

di conseguenza dovresti usare questo stesso comando sugli altri script.

chmod u+x script2.sh

chmod u+x script3.sh

 

da quel che ho capito era questo il problema.

se poi non ti si apre ancora nulla puoi provare con il full path:

open -a /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal script2.sh

Link al commento
Condividi su altri siti

ho fatto una piccola prova e forse ho capito qual'è il problema... tutti gli script devono essere eseguibili.

chmod u+x script.sh

non è sufficiente (a meno che non crei gli altri con copia-incolla dopo aver reso script.sh eseguibile).

di conseguenza dovresti usare questo stesso comando sugli altri script.

chmod u+x script2.sh

chmod u+x script3.sh

 

da quel che ho capito era questo il problema.

se poi non ti si apre ancora nulla puoi provare con il full path:

open -a /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal script2.sh

 

 

Intanto ti ringrazio perche così effettivamente si aprono tutti i terminali!! Il problema però è che i comand mi sembrano inutilizzabili, ovvero appaiono sui nuovi terminali ma non vengono eseguiti (come se nessuno premesse invio)

 

Last login: Mon Sep 19 12:53:22 on ttys003

/Users/Vins/Desktop/FileConInt/BackDrop/script4.sh ; exit;

MacBook-Pro-di-Vincenzo:~ Vins$ /Users/Vins/Desktop/FileConInt/BackDrop/script4.sh ; exit;

open -a Spotify

logout

Saving session...

...copying shared history...

...saving history...truncating history files...

...completed.

 

[Processo completato]

 

ovviamente se il comando open -a Spotify lo do a mano e premo invio si apre l'app

Link al commento
Condividi su altri siti

Intanto ti ringrazio perche così effettivamente si aprono tutti i terminali!! Il problema però è che i comand mi sembrano inutilizzabili, ovvero appaiono sui nuovi terminali ma non vengono eseguiti (come se nessuno premesse invio)

 

Last login: Mon Sep 19 12:53:22 on ttys003

/Users/Vins/Desktop/FileConInt/BackDrop/script4.sh ; exit;

MacBook-Pro-di-Vincenzo:~ Vins$ /Users/Vins/Desktop/FileConInt/BackDrop/script4.sh ; exit;

open -a Spotify

logout

Saving session...

...copying shared history...

...saving history...truncating history files...

...completed.

 

[Processo completato]

 

ovviamente se il comando open -a Spotify lo do a mano e premo invio si apre l'app

prova con echo "hello world"

questo dovrebbe funzionare

Link al commento
Condividi su altri siti

Beh si dando come comando echo "hello world" mi stampa a terminale "hello world", il punto è che a me servirebbe che ciò che appare su terminale venga eseguito come se dopo aver scritto il comando dessi invio

prova allora a richiamare il compilatore java come volevi fare all'inizio.

echo "hello world" funziona esattamente come funziona manualmente quindi immagino che anche un comando tipo javac funzioni.

Link al commento
Condividi su altri siti

prova allora a richiamare il compilatore java come volevi fare all'inizio.

echo "hello world" funziona esattamente come funziona manualmente quindi immagino che anche un comando tipo javac funzioni.

 

eh provando a fare quelle che effettivamente mi serve non va, sia con virgolette che senza virgolette. Posto i due output dopo aver eseguito echo "hello World" e echo "jolie market.ol" (che funziona come comando  perché lo utilizzo tutti i giorni  e perché sto programmando in quel linguaggio)

 

Last login: Mon Sep 19 15:00:42 on ttys000

/Users/Vins/Desktop/FileConInt/BackDrop/script1.sh ; exit;

MacBook-Pro-di-Vincenzo:~ Vins$ /Users/Vins/Desktop/FileConInt/BackDrop/script1.sh ; exit;

“Hello Worldâ€

“jolie market.olâ€

logout

Saving session...

...copying shared history...

...saving history...truncating history files...

...completed.

 

[Processo completato]

 
 
o senza virgolette:
Last login: Mon Sep 19 15:00:42 on ttys000

/Users/Vins/Desktop/FileConInt/BackDrop/script1.sh ; exit;

MacBook-Pro-di-Vincenzo:~ Vins$ /Users/Vins/Desktop/FileConInt/BackDrop/script1.sh ; exit;

Hello World

jolie market.ol

logout

Saving session...

...copying shared history...

...saving history...truncating history files...

...completed.

 

[Processo completato]

 
Va beh sei stato fin troppo gentile ma mi sa che questo script non riesco a farlo :(
Link al commento
Condividi su altri siti

eh provando a fare quelle che effettivamente mi serve non va, sia con virgolette che senza virgolette. Posto i due output dopo aver eseguito echo "hello World" e echo "jolie market.ol" (che funziona come comando  perché lo utilizzo tutti i giorni  e perché sto programmando in quel linguaggio)

 

ho fatto una prova di compilazione... e ho notato che la open ti apre il terminale nella home.

prova così.

 

crea script.sh nel Desktop:

#!/bin/bash
open -a Terminal script2.sh

posizionati nella cartella di script.sh con:

cd Desktop/

poi

chmod u+x script.sh

duplica script.sh e chiamalo script2.sh

#!/bin/bash
cd Desktop/
javac HelloWorld.java
java HelloWorld

sempre sulla scrivania crea HelloWorld.java:

public class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello World");
	}
}

per finire sempre nella posizionato nella scrivania usa il semplice comando:

./script.sh 

se non funziona così non so cosa dirti a me compila e stampa Hello World.

Link al commento
Condividi su altri siti

ho fatto una prova di compilazione... e ho notato che la open ti apre il terminale nella home.

prova così.

 

crea script.sh nel Desktop:

#!/bin/bash
open -a Terminal script2.sh

posizionati nella cartella di script.sh con:

cd Desktop/

poi

chmod u+x script.sh

duplica script.sh e chiamalo script2.sh

#!/bin/bash
cd Desktop/
javac HelloWorld.java
java HelloWorld

sempre sulla scrivania crea HelloWorld.java:

public class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello World");
	}
}

per finire sempre nella posizionato nella scrivania usa il semplice comando:

./script.sh 

se non funziona così non so cosa dirti a me compila e stampa Hello World.

 

Grandissimo mi funziona tutto adesso, quindi il problema era quello della nuova posizione del terminale. L'unica cosa che mi dispiace è che io consegnerò il file dentro una cartella contenente gli altri file e speravo che in automatico eseguendo il primo script eseguisse tutto senza dover andare sul desktop. Se hai una soluzione anche per quello ti ringrazio tantissimo! Altrimenti grazie perché già così hai fatto molto!!! Grazie ancora!

Link al commento
Condividi su altri siti

Grandissimo mi funziona tutto adesso, quindi il problema era quello della nuova posizione del terminale. L'unica cosa che mi dispiace è che io consegnerò il file dentro una cartella contenente gli altri file e speravo che in automatico eseguendo il primo script eseguisse tutto senza dover andare sul desktop. Se hai una soluzione anche per quello ti ringrazio tantissimo! Altrimenti grazie perché già così hai fatto molto!!! Grazie ancora!

il problema è che per fare quel che dici dovresti ricavare la cartella e passarla come parametro... non ho idea di come si possa fare nella bash con il comando open.

però ti devi comunque posizionare nella cartella giusta prima di compilare, quindi ti basta cambiare il cd all'interno di script2.sh. la cartella non dev'essere necessariamente il desktop naturalmente, ti basta fare il cd sulla cartella dove sono contenuti script e codice java.

 

se però devi semplicemente compilare più di un file per volta forse ti conviene fare un makefile... è molto più semplice e funziona senza posizionarsi in una cartella specifica.

Link al commento
Condividi su altri siti

il problema è che per fare quel che dici dovresti ricavare la cartella e passarla come parametro... non ho idea di come si possa fare nella bash con il comando open.

però ti devi comunque posizionare nella cartella giusta prima di compilare, quindi ti basta cambiare il cd all'interno di script2.sh. la cartella non dev'essere necessariamente il desktop naturalmente, ti basta fare il cd sulla cartella dove sono contenuti script e codice java.

 

se però devi semplicemente compilare più di un file per volta forse ti conviene fare un makefile... è molto più semplice e funziona senza posizionarsi in una cartella specifica.

 

No no alla fine io per non stare a spiegare mille cose ho fatto un esempio su javac e java, in realtà sto utilizzando il linguaggio Jolie pertanto volevo creare un eseguibile che una volta avviato (all'interno della cartella in cui risiedono tutti gli altri file) mi faccia partire tutte le classe e quindi tipo:

jolie file1.ol

jolie file2.ol

jolie file3.ol 

 

e pensavo di farlo facendo eseguire ogni comando ad uno script cosi come mi avevi suggerito, solo che a questo punto funzionerebbe solo sul desktop e quindi non credo di poter fare cosi, devo trovare un modo per farlo dal linguaggio stesso creando un launcher in quel linguaggio ..Ad ogni modo sei stato veramente gentilissimo, ci tengo a ringraziarti per la pazienza e per il supporto, questa cosa mi ha comunque insegnato un po di cose

Link al commento
Condividi su altri siti

 funzionerebbe solo sul desktop

beh sicuramente funziona solo nella cartella specificata ma non necessariamente sul desktop.

Ho notato che l'hai scritto anche prima ma ci tengo a precisarlo, la cartella del Desktop era solo un esempio e come ti ho già scritto si può cambiare.

se ad esempio la tua cartella con gli eseguibili che di chiama prova si trova in Downloads/prova/ ti basta usare cd in modo appropriato

cd Downloads/prova/

(e cambiarlo in script2.sh).

 

Più che altro ogni volta che cambi cartella di eseguibili devi aggiornare script2.sh.

 

PS. probabilmente fare un piccolo script in java, c o forse Jolie (non l'ho mai usato quindi non so) è molto più semplice per ricavare la cartella.

Link al commento
Condividi su altri siti

beh sicuramente funziona solo nella cartella specificata ma non necessariamente sul desktop.

Ho notato che l'hai scritto anche prima ma ci tengo a precisarlo, la cartella del Desktop era solo un esempio e come ti ho già scritto si può cambiare.

se ad esempio la tua cartella con gli eseguibili che di chiama prova si trova in Downloads/prova/ ti basta usare cd in modo appropriato

cd Downloads/prova/

(e cambiarlo in script2.sh).

 

Più che altro ogni volta che cambi cartella di eseguibili devi aggiornare script2.sh.

 

PS. probabilmente fare un piccolo script in java, c o forse Jolie (non l'ho mai usato quindi non so) è molto più semplice per ricavare la cartella.

Grazie mille! Vedrò come fare perché non so dove il prof terrà la cartella.. Alla prossima!

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...