incomincio con un esempio, vorrei poter scrivere solo 'install pappo' in luogo di 'sudo apt-get install pappo'.

in generale, come si scrive una funzione su .baschrc in grado di ricevere un numero arbitrario di argomenti e mettere ciascuno di questi nel "punto giusto" dello script?

grazie mille.

chiesto 13 Jun '15, 01:10

airordl's gravatar image

airordl
407596876


Rispondo fornendoti un esempio dal tuo commento.

Potresti usare uno script tipo questo:

#!/bin/bash

g++ -std=c++11 -o ciccio "$1" && ./ciccio < "$2"

salvarlo nella tua home con nome nuovog++ e poi creare un alias

alias g++='~/nuovog++'

e poi potrai richiarmarlo con

g++ ciccio.C testo

sennò puoi direttamente mettere testo dentro lo script al posto di "$2" e chiamarlo con un parametro solo.

Ti consiglio vivamente di dare una bella lettura al manuale di bash e di seguire almeno un tutorial su come programmare in bash, ad esempio questo è il primo risultato di una ricerca Google.
Ti risparmierai tanto tempo in futuro! :)

coll. permanente

ha risposto 13 Jun '15, 17:36

dadexix86's gravatar image

dadexix86 ♦♦
17.0k916161

Quel che vuoi fare tu è creare un alias :

Crea un file di nome .bash_aliases nella home directory;

mettici dentro tutti gli alias che vuoi, ad esempio

alias install="sudo apt-get install"

Si sconsiglia di modificare direttamente il file .bashrc per creare alias, come specificato nel file stesso, che controlla l'esistenza di .bash_aliases e, in caso, lo include.

coll. permanente

ha risposto 13 Jun '15, 08:34

dslul's gravatar image

dslul
9632416

modificato 13 Jun '15, 08:36

in quel caso funzionerebbe, però in caso di script più complessi vorrei poter saper scrivere una funzione. ad esempio:

g++ ciccio.C

invece di

g++ -std=c++11 -o ciccio ciccio.C && ./ciccio < testo

(è solo un esempio)

(13 Jun '15, 16:53) airordl airordl's gravatar image

Una funzione è come uno script, solo che non è contenuta in un file a parte, per esempio, dagli esempi precedenti:

#!/bin/bash

mygpp() {
    g++ -std=c++11 -o ciccio "$1" && ./ciccio < "$2"
}

mygpp ciccio.C testo

Se il testo della sola funzione lo metti in ~/.bashrc allora sarà disponibile sempre.

Una nota sulle precedenti soluzioni: gli alias sono deprecati, le funzioni possono fare tutto quello che fanno gli alias e molto di più. Gli alias restano per compatibilità con il passato, ma vanno usati solo per cose estremamente semplici. Se appena vuoi un comando con parametri che non vanno tutti alla fine, come quello dell'esempio, gli alias non possono essere usati, a meno che non si usi qualche sotterfugio quale quello di creare uno script che viene a sua volta richiamato dall'alias (ma a questo punto perché richiamare l'alias e non direttamente lo script?).

coll. permanente

ha risposto 13 Jun '15, 17:58

enzotib's gravatar image

enzotib ♦♦
14.1k113187

@enzotib come al solito mi sento molto ignorante :) la funzione che hai definito mygpp si può chiamare come chiede l'OP g++?
(è l'unico motivo per cui io ho inserito l'alias nella risposta)

(13 Jun '15, 18:03) dadexix86 ♦♦ dadexix86's gravatar image

@dadexix86: purtroppo no, i nomi delle funzioni sono identificatori validi come i nomi delle variabili, e non possono contenere caratteri strani.

(13 Jun '15, 19:45) enzotib ♦♦ enzotib's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×106
×52

domanda posta: 13 Jun '15, 01:10

domanda visualizzata: 2,010 volte

ultimo aggiornamento: 13 Jun '15, 19:45

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.