[RISOLTO] come creare un "alias" con variabili in ingresso
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
[RISOLTO] come creare un "alias" con variabili in ingresso
Salve a tutti. Sono uno studente di fisica, sono un principiante della programmazione e dovrò fare abbondante uso di Linux e c++. Mi sono iscritto al forum perché mi piacerebbe destreggiarmi con Linux. Spero con il vostro aiuto di imparare tanti trucchetti. Ho subito una domanda da porvi. E' possibile con particolari funzioni degli script della bash shell creare una sorta di alias che riceva delle variabili? Ciò che vorrei fare è riunire il comando g++ -o pippo pippo.cpp in un unico comando
ccg pippo.cpp
che mi dia l'eseguibile di nome ./pippo (e se magari esiste il modo anche di eliminare i caratteri ./). Il ccg è il nome che ho dato io all'ipotetico "alias" che riceve in ingresso come variabile il nome del file sorgente.
ccg pippo.cpp
che mi dia l'eseguibile di nome ./pippo (e se magari esiste il modo anche di eliminare i caratteri ./). Il ccg è il nome che ho dato io all'ipotetico "alias" che riceve in ingresso come variabile il nome del file sorgente.
Ultima modifica di astrifiammante il giovedì 4 giugno 2015, 7:18, modificato 1 volta in totale.
- Mdfalcubo
- Moderatore Globale

- Messaggi: 20420
- Iscrizione: venerdì 26 dicembre 2008, 11:17
- Desktop: Solo XFCE
- Distribuzione: Xubuntu 64 bit
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
Sposto in programmazione.
"Il genere umano è stimolante, è la gente che non sopporto,, (Linus - Peanuts)
- ubuntumate
- Entusiasta Emergente

- Messaggi: 1180
- Iscrizione: giovedì 28 maggio 2015, 18:18
- Distribuzione: Windows 7
- Sesso: Maschile
- Località: Milano
Re: come creare un "alias" con variabili in ingresso
Nel terminale digita
per avere una spiegazione approfondita del comando.
Per usare un alias:
Nota che gli alias sono temporanei e si perdono a fine sessione.Per renderli permanenti devi modificare bashrc.
Codice: Seleziona tutto
man alias
Per usare un alias:
Codice: Seleziona tutto
alias [comando da accorciare] [alias]
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
ACM/IEEE Code of ethics.
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: come creare un "alias" con variabili in ingresso
In realtà un alias non è lo strumento giusto per questo tipo di lavoro, perché agli alias non puoi passare variabili in ingresso. Devi fare una function.
La versione più becera possibile è questa:
Sottolineo nuovamente che è una versione becera, è proprio quella a minimo sforzo possibile, ma è giusto per dare un'idea.
Come ha detto giustamente ubuntumate per gli alias, anche le funzioni vengono perse quando si chiude la sessione di terminale, a meno che non siano inserite ad esempio in ~/.bashrc.
PS:

La versione più becera possibile è questa:
Codice: Seleziona tutto
function ccg ()
{
g++ "$1" -o $(basename "$1" .cpp)
}Come ha detto giustamente ubuntumate per gli alias, anche le funzioni vengono perse quando si chiude la sessione di terminale, a meno che non siano inserite ad esempio in ~/.bashrc.
PS:
Giusto ricordare di usare il manuale, ma in questo caso il comando da dare èubuntumate ha scritto:Nel terminale digitaper avere una spiegazione approfondita del comando.Codice: Seleziona tutto
man alias
.
Codice: Seleziona tutto
help alias"I find your lack of faith disturbing."
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: come creare un "alias" con variabili in ingresso
La risposta alla domanda è già contenuta nella messaggio di 1001001 qui sopra.
Dal momento che dichiari espressamente di voler imparare tanti trucchetti
In alto a destra trovi la voce "ricerca avanzata". Nella finestra che si apre, puoi personalizzare la ricerca.
Con le parole "alias parametri" e restringendo la ricerca a questa sezione di programmazione, i primi due risultati erano le discussioni che ti servivano
In generale, usala quando ti viene una curiosità, perché trovi praticamente l'universo intero (per non parlare della ricerca con Google, se individui quali sono i forum o quello che sia che trattano argomenti di programmazione in modo molto tecnico e approfondito)

Dal momento che dichiari espressamente di voler imparare tanti trucchetti
ti indico l'esistenza della funzione ricerca. Questa domanda che fai è stata posta già (minimo) un paio di volte e potevi trovare traccia delle discussioni che ne parlano facendo una ricerca avanzata.Spero con il vostro aiuto di imparare tanti trucchetti.
In alto a destra trovi la voce "ricerca avanzata". Nella finestra che si apre, puoi personalizzare la ricerca.
Con le parole "alias parametri" e restringendo la ricerca a questa sezione di programmazione, i primi due risultati erano le discussioni che ti servivano
In generale, usala quando ti viene una curiosità, perché trovi praticamente l'universo intero (per non parlare della ricerca con Google, se individui quali sono i forum o quello che sia che trattano argomenti di programmazione in modo molto tecnico e approfondito)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
Vi ringrazio per le risposte. Scusate se non ho effettuato un ricerca approfondita, sono nuovo del forum. Avevo scritto questo messaggio proprio perché sapevo che non era possibile creare un alias con argomenti. Per questo l'avevo virgolettato, per sapere se c'era un modo per creare un analogo con argomenti. Provo subito la function che mi avete indicato. Grazie ancora. 
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
1001001, scusa se ti disturbo ancora: sono alle prime armi e avrei bisogno di un'altra informazione inerente alla risposta che mi avevi dato qui. Ho provato a scrivere tale funzione dal prompt di shell e l'ho lanciata dalla cartella in cui si trova la funzione ed il file sorgente pippo.cpp che voglio compilare, ma quando lancio la funzione con ccg pippo.cpp mi da il messaggio basenamepippo.cpp.cpp:comando non trovato. (mi ripete fra l'altro l'estensione cpp due volte?). In oltre il compilatore c++ mi da errore nella lista di ingresso del nome file.cpp e del nome che ho scelto per l'eseguibile. Su internet non ho trovato una documentazione specifica (molto probabilmente cerco male io). Ho visto che in un programma di script bash fanno così per ottenere il nomebase del file e la sua estensione:
filename=${file##*/}
basename=${filename%\.*}
extension=${filename##*.}
dove nella variabile file c'è il nome del file (ti posto il sito:https://piccimario.wordpress.com/2011/0 ... a-un-path/). Dunque un modo potrebbe essere:
function ccg()
{
g++ -o ${$1%\.*} $1
}
dove nel primo argomento del comando g++ -o dovrebbe esserci il nome che voglio dare all'eseguibile (dovrebbe essere in base alle dritte del sito che ti avevo segnalato quello che finisce nella variabile basename visto che in $1, il primo argomento che si passa alla funzione, finisce il nome del file sorgente). Mentre $1 è il secondo argomento ovvero il nome del file sorgente che vado a compilare. Purtroppo non mi funziona neanche così mi da:
bash: ${$1%\.*} : sostituzione errata.
filename=${file##*/}
basename=${filename%\.*}
extension=${filename##*.}
dove nella variabile file c'è il nome del file (ti posto il sito:https://piccimario.wordpress.com/2011/0 ... a-un-path/). Dunque un modo potrebbe essere:
function ccg()
{
g++ -o ${$1%\.*} $1
}
dove nel primo argomento del comando g++ -o dovrebbe esserci il nome che voglio dare all'eseguibile (dovrebbe essere in base alle dritte del sito che ti avevo segnalato quello che finisce nella variabile basename visto che in $1, il primo argomento che si passa alla funzione, finisce il nome del file sorgente). Mentre $1 è il secondo argomento ovvero il nome del file sorgente che vado a compilare. Purtroppo non mi funziona neanche così mi da:
bash: ${$1%\.*} : sostituzione errata.
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: come creare un "alias" con variabili in ingresso
[
Un paio di dettagli tecnici prima di rispondere alla domanda, visto che sei nuovo del forum
- se devi modificare un messaggio, usa il tasto "modifica" in alto a destra, non farne uno nuovo, altrimenti le discussioni diventano lunghissime e illeggibili
- per massimizzare la probabilità di trovare il problema in tempi rapidi, riporta il messaggio di errore esattamente, non parafrasarlo (mi riferisco a:
]
Detto questo,
Copia e incolla la riga qua sotto nel terminale:
e riprova
Un paio di dettagli tecnici prima di rispondere alla domanda, visto che sei nuovo del forum
- se devi modificare un messaggio, usa il tasto "modifica" in alto a destra, non farne uno nuovo, altrimenti le discussioni diventano lunghissime e illeggibili
- per massimizzare la probabilità di trovare il problema in tempi rapidi, riporta il messaggio di errore esattamente, non parafrasarlo (mi riferisco a:
- quando inserisci del codice (o l'output di qualcosa), usa il tasto "Codice" che c'è nella barra degli strumenti sopra la casella di testo di composizione del messaggio, sempre per questioni di leggibilitàastrifiammante ha scritto:Inoltre il compilatore c++ mi da errore nella lista di ingresso del nome file.cpp e del nome che ho scelto per l'eseguibile.
]
Detto questo,
Devi aver perso gli spazi tra basename e "$1" e tra "$1" e .cpp quando hai scritto il comando.astrifiammante ha scritto:quando lancio la funzione con ccg pippo.cpp mi da il messaggio basenamepippo.cpp.cpp:comando non trovato. (mi ripete fra l'altro l'estensione cpp due volte?)
Copia e incolla la riga qua sotto nel terminale:
Codice: Seleziona tutto
function ccg () { g++ "$1" -o $(basename "$1" .cpp); }"I find your lack of faith disturbing."
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
grazie 1001001 funziona. Due chiarimenti ancora se non chiedo troppo:
1)Per lanciare l'eseguibile il suo nome va preceduto dai caratteri ./ . Se non chiedo troppo esiste un metodo per poterli non digitare?
2)Quando si compila con l'opzione -o entrambi gli argomenti (i nomi dell'eseguibile e del sorgente) vanno a destra di -o. Nella function ne hai messo uno a sinistra e uno a destra. In $1 va il nome del file sorgente (cioè basename.estensione), perché a destra di -o hai messo basename "$1" .cpp?
1)Per lanciare l'eseguibile il suo nome va preceduto dai caratteri ./ . Se non chiedo troppo esiste un metodo per poterli non digitare?
2)Quando si compila con l'opzione -o entrambi gli argomenti (i nomi dell'eseguibile e del sorgente) vanno a destra di -o. Nella function ne hai messo uno a sinistra e uno a destra. In $1 va il nome del file sorgente (cioè basename.estensione), perché a destra di -o hai messo basename "$1" .cpp?
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: come creare un "alias" con variabili in ingresso
Piccolo intervento a margine: non chiedi troppo. Questo è un forum di supporto, funziona proprio che gli utenti chiedono e gli utenti rispondono 
(non per parlare a nome di 1001001, ma proprio perché è così).
A fine discussione, me la rileggo e aggiungo un paio di "cose", se non ne avrete già parlato

(non per parlare a nome di 1001001, ma proprio perché è così).
A fine discussione, me la rileggo e aggiungo un paio di "cose", se non ne avrete già parlato
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- tokijin
- Moderatore Globale

- Messaggi: 4625
- Iscrizione: mercoledì 3 giugno 2009, 23:10
- Desktop: plasma 5.27.4
- Distribuzione: Kubuntu 23.04
- Località: Abruzzo
Re: come creare un "alias" con variabili in ingresso
@astrifiammante
per favore quando devi postare codici o listati in generale, utilizza il tag Codice:
nella risposta premi il bottone Codice e dentro i tag [ code] e [ /code] ci scrivi il tuo codice
Ciao
per favore quando devi postare codici o listati in generale, utilizza il tag Codice:
nella risposta premi il bottone Codice e dentro i tag [ code] e [ /code] ci scrivi il tuo codice
Ciao
Sei abbruzzese se dopo che ti sei strafogato un chilogrammo di pasta, hai il coraggio di dire alla cuoca "cacc ch'è cott" - Se entra un piccione in casa..chiudi le finestre!
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
Ok la domanda 2 l'ho risolta banalmente, perché sono accettate entrambe le possibilità:
La 1 si tratta di non specificare al momento del lancio il path in cui si trova l'eseguibile (visto che ./ indica che si trova nella directory corrente). Nel sito: http://wwwcdf.pd.infn.it/AppuntiLinux/f ... uibili.htm spiega come fare (paragrafo 35.1avvio di un programma e variabile di ambiente "path") per poter modificare il contenuto della variabile "path". Ulteriore domanda a questo punto, posso evitare di scrivere il path (ergo i caratteri ./ che è ciò che mi interessa all'atto della compilazione di un file cpp) soltanto per gli eseguibili prodotti da g++? Nel senso che la non specificazione mi occorre soltanto per gli eseguibili di g++ e voglio lasciare il path per gli altri comandi. C'è soltanto la via della modifica della variabile path?
Codice: Seleziona tutto
g++ nomefilesorgente.cpp -o nomefileeseguibileCodice: Seleziona tutto
g++ -o nomefileeseguibile nomefilesorgente.cpp-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: come creare un "alias" con variabili in ingresso
astrifiammante [url=http://forum.ubuntu-it.org/viewtopic.php?p=4764663#p4764663][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:2)Quando si compila con l'opzione -o entrambi gli argomenti (i nomi dell'eseguibile e del sorgente) vanno a destra di -o. Nella function ne hai messo uno a sinistra e uno a destra. In $1 va il nome del file sorgente (cioè basename.estensione), perché a destra di -o hai messo basename "$1" .cpp?
Esatto, sono accettate entrambe le possibilità, perché gli argomenti in ingresso a g++ e a molti altri comandi da shell (vorrei dire tutti, ma sono sicuro che poi ci sarebbe l'eccezione che adesso non mi viene in mente) non hanno un ordine prestabilito (ma nota che con "argomenti in ingresso" intendo la coppia -<opzione> <valore> se l'opzione richiede un valore: cioè, dopo -o devi mettere per forza il nome di output, ma puoi mettere -o nome e file_in_ingresso nell'ordine che vuoi).astrifiammante ha scritto:Ok la domanda 2 l'ho risolta banalmente, perché sono accettate entrambe le possibilità:
Codice: Seleziona tutto
g++ nomefilesorgente.cpp -o nomefileeseguibileCodice: Seleziona tutto
g++ -o nomefileeseguibile nomefilesorgente.cpp
astrifiammante ha scritto: 1)Per lanciare l'eseguibile il suo nome va preceduto dai caratteri ./ . Se non chiedo troppo esiste un metodo per poterli non digitare?
Sì, c'è solo la via della modifica di PATH. Un eseguibile è un eseguibile, non puoi differenziare il modo in cui l'eseguibile viene cercato in base a chi l'ha creato.astrifiammante ha scritto:La 1 si tratta di non specificare al momento del lancio il path in cui si trova l'eseguibile (visto che ./ indica che si trova nella directory corrente). Nel sito: http://wwwcdf.pd.infn.it/AppuntiLinux/f ... uibili.htm spiega come fare (paragrafo 35.1avvio di un programma e variabile di ambiente "path") per poter modificare il contenuto della variabile "path". Ulteriore domanda a questo punto, posso evitare di scrivere il path (ergo i caratteri ./ che è ciò che mi interessa all'atto della compilazione di un file cpp) soltanto per gli eseguibili prodotti da g++? Nel senso che la non specificazione mi occorre soltanto per gli eseguibili di g++ e voglio lasciare il path per gli altri comandi. C'è soltanto la via della modifica della variabile path?
Puoi però aggirare (in un certo senso) questa cosa creando una cartella (tipo ~/c++_exe_files/) che aggiungi poi al PATH e che usi nella function di sopra:
Codice: Seleziona tutto
function ccg () { g++ "$1" -o ~/c++_exe_files/"$(basename "$1" .cpp)"; }"I find your lack of faith disturbing."
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
Ok recepito. Ringrazio tutti per le dritte 
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
ah! dimenticavo. mi avete detto che per far valere le funzioni anche dopo una sessione bisogna inserirle nel file .bashrc. Ho aperto il mio file con gedit . Come faccio poi ad inserire la funzione ccg, la copio paro paro in fondo al file senza aggiungerci nulla o devo scrivere qualcosaltro (oltre al codice della funzione)?
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: come creare un "alias" con variabili in ingresso
Sì sì, incolla semplicemente la funzione in fondo.
Ricordati che poi le modifiche avranno effetto solo sui terminali che apri dopo che hai salvato il file modificato (a meno che tu non chiami
dai terminali già aperti)
Ricordati che poi le modifiche avranno effetto solo sui terminali che apri dopo che hai salvato il file modificato (a meno che tu non chiami
Codice: Seleziona tutto
source ~/.bashrc
"I find your lack of faith disturbing."
-
astrifiammante
- Prode Principiante
- Messaggi: 17
- Iscrizione: domenica 31 maggio 2015, 18:06
- Distribuzione: 12.4
- Sesso: Maschile
Re: come creare un "alias" con variabili in ingresso
ok tutto a posto!!!! 
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: come creare un "alias" con variabili in ingresso
Ok! Se hai risolto ricordati di aggiungere [Risolto] al titolo del primo messaggio!
@vaeVictis
@vaeVictis
Vai!vaeVictis ha scritto:A fine discussione, me la rileggo e aggiungo un paio di "cose", se non ne avrete già parlato
"I find your lack of faith disturbing."
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [RISOLTO] come creare un "alias" con variabili in ingres
Ne avete parlato. Mi riferivo alla modifica al file .bashrc 
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti