[RISOLTO] come creare un "alias" con variabili in ingresso

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
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

Messaggio da astrifiammante »

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.
Ultima modifica di astrifiammante il giovedì 4 giugno 2015, 7:18, modificato 1 volta in totale.
Avatar utente
Mdfalcubo
Moderatore Globale
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

Messaggio da Mdfalcubo »

Sposto in programmazione.
"Il genere umano è stimolante, è la gente che non sopporto,, (Linus - Peanuts)
Avatar utente
ubuntumate
Entusiasta Emergente
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

Messaggio da ubuntumate »

Nel terminale digita

Codice: Seleziona tutto

man alias
per avere una spiegazione approfondita del comando.
Per usare un alias:

Codice: Seleziona tutto

alias [comando da accorciare] [alias]
Nota che gli alias sono temporanei e si perdono a fine sessione.Per renderli permanenti devi modificare bashrc.
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.
1001001
Entusiasta Emergente
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

Messaggio da 1001001 »

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:

Codice: Seleziona tutto

function ccg () 
{
    g++ "$1" -o $(basename "$1" .cpp) 
}
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:
ubuntumate ha scritto:Nel terminale digita

Codice: Seleziona tutto

man alias
per avere una spiegazione approfondita del comando.
.
Giusto ricordare di usare il manuale, ma in questo caso il comando da dare è

Codice: Seleziona tutto

help alias

:)
"I find your lack of faith disturbing."
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

La risposta alla domanda è già contenuta nella messaggio di 1001001 qui sopra.

Dal momento che dichiari espressamente di voler imparare tanti trucchetti
Spero con il vostro aiuto di 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.
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)

:ciao:
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.»
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

Messaggio da astrifiammante »

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. :ciao:
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

Messaggio da astrifiammante »

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.
1001001
Entusiasta Emergente
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

Messaggio da 1001001 »

[
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:
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.
- 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à
]

Detto questo,
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?)
Devi aver perso gli spazi tra basename e "$1" e tra "$1" e .cpp quando hai scritto il comando.
Copia e incolla la riga qua sotto nel terminale:

Codice: Seleziona tutto

function ccg () { g++ "$1" -o $(basename "$1" .cpp); }
e riprova
"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

Messaggio da astrifiammante »

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?
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

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

:ciao:
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.»
Avatar utente
tokijin
Moderatore Globale
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

Messaggio da tokijin »

@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 :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
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

Messaggio da astrifiammante »

Ok la domanda 2 l'ho risolta banalmente, perché sono accettate entrambe le possibilità:

Codice: Seleziona tutto

g++ nomefilesorgente.cpp -o nomefileeseguibile

Codice: Seleziona tutto

g++ -o nomefileeseguibile nomefilesorgente.cpp
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?
1001001
Entusiasta Emergente
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

Messaggio da 1001001 »

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?
astrifiammante ha scritto:Ok la domanda 2 l'ho risolta banalmente, perché sono accettate entrambe le possibilità:

Codice: Seleziona tutto

g++ nomefilesorgente.cpp -o nomefileeseguibile

Codice: Seleziona tutto

g++ -o nomefileeseguibile nomefilesorgente.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: 1)Per lanciare l'eseguibile il suo nome va preceduto dai caratteri ./ . Se non chiedo troppo esiste un metodo per poterli non digitare?
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?
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.
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)"; }
In questo modo tutti gli eseguibili che crei vengono salvati in ~/c++_exe_files/ e possono quindi essere lanciati usando solo il loro nome, visto che ~/c++_exe_files/ è in PATH. Occhio però che così facendo compilando file diversi con nomi uguali (ad esempio, io i miei file li chiamo tutti main.cpp e li distinguo in base alla cartella in cui sono) gli eseguibili in ~/c++_exe_files/ vengono sovrascritti
"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

Messaggio da astrifiammante »

Ok recepito. Ringrazio tutti per le dritte :birra:
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

Messaggio da astrifiammante »

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

Messaggio da 1001001 »

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

Codice: Seleziona tutto

source ~/.bashrc
dai terminali già aperti)
"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

Messaggio da astrifiammante »

ok tutto a posto!!!! :D
1001001
Entusiasta Emergente
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

Messaggio da 1001001 »

Ok! Se hai risolto ricordati di aggiungere [Risolto] al titolo del primo messaggio!

@vaeVictis
vaeVictis ha scritto:A fine discussione, me la rileggo e aggiungo un paio di "cose", se non ne avrete già parlato :)
Vai! :)
"I find your lack of faith disturbing."
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

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.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti