Newsgroup: it.comp.os.linux.iniziare
Titolo: Come mettere un alias in uno script

Ho fatto questo script "prova":
 
---------------
#!/bin/bash
 
shopt -s expand_aliases
shopt expand_aliases
alias pippo="echo funziona"
alias
pippo
------------------
 
mi dice:
 
expand_aliases on
alias pippo='echo funziona'
./prova: line 7: pippo: command not found
 
sapete spiegarmi perche' non trova pippo, cioe' dove sbaglio? TIA
 
-- 
Tanti saluti
 

 sapete spiegarmi perche' non trova pippo, cioe' dove sbaglio? TIA
 
Hai scritto un casino:
 
#!/bin/bash
shopt -s expand_aliases
alias pippo='echo funziona'
pippo
 
Nicola.
 
-- 
chi va pian va san e va lontan

 ./prova: line 7: pippo: command not found
 
Boh, a me funziona. Quale shell usi? Quale versione?
 
 

Addi' 02 mar 2012, NicoKid scrive:

E' la stessa cosa, io ho messo in piu' i comandi shopt e alias per 
vedere se li aveva presi o no, e infatti mi dice che li ha presi 
entrambi, solo che poi misteriosamente pippo non lo trova piu'.
 
Cmq grazie, e ringrazio anche Mallin, ma adesso ho risolto mettendo il 
comando in una variabile, cosi':
 
LL='/bin/ls -vgG --group-directories-first --color=always \
--time-style="+%d %b %Y" --block-size=1048576'
 
e poi per chiamarlo ci scrivo: $(LL).
 
-- 
Tanti saluti
 

 entrambi, solo che poi misteriosamente pippo non lo trova piu'.
 
Sarà, ma con i tuoi comandi aggiuntivi lo script non funziona.


 Sarà, ma con i tuoi comandi aggiuntivi lo script non funziona.
 
  A me invece funziona.  Mi chiedo se non possano forse essersi
intrufolati dei caratteri spuri nello script di Yoda, oppure se lo sta
eseguendo in una shell non Bourne.
 
 
  Ciao,
 
 
-- 
Alessandro Selli 
http://alessandro.route-add.net
 
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.

 eseguendo in una shell non Bourne.
 
E' vero, ho ricopiato lo script e ora funziona. C'era qualche schifezza in 
mezzo.


 eseguendo in una shell non Bourne.
 
Ho cambiato /etc/profile, /etc/bash.bashrc, ~/.bashrc, ~/.profile.
Il resto e' tutto secondo il default della testing di Debian, compresa 
la versione di bash.
Nota bene che lo do in console vera, non nel terminale.
Caratteri spuri non ce ne sono, ho controllato adesso con cat -A.
 
-- 
Tanti saluti
 

 pippo
 
 
È vero ha scritto un casino usando un alias in uno script.
Ma tu cosa stai facendo di diverso.
 

 --time-style="+%d %b %Y" --block-size=1048576'
 
Eccolo là. sei passato da una semplice imprecisione ad un errore
colossale: mettere l'output di un comando in una parametro usando
la sostituzione dei comando è una operazione pericolosa. Ok quando 
l'otput è una breve stringa, OK nei casi canonici ma quando l'output
del comando è molto corposo stai cercando guai: stai facendo una
cosa sbagliata nel modo sbagliato. Poi tu vuoi l'output di ls. Peggio
che andar di notte. Rielaaborare l'output di LS è semplicemente *MALE*
 
Ancora una volta posta il tuo problema e non la tua soluzione.
 


 
perche' e' male?
scusate la banalita', ma son poco pratico ed e' l'occasione buona per 
imparare qualcosa.

Addi' 05 mar 2012, mallin.shetland scrive:

Il problema e' che ho molte directory di musica e voglio grepparle 
tutte con un unico comando da console.
L'alias o la variabile sono SOLTANTO per rendere lo script piu' 
leggibile, perche' c'ho "select" e "case" intrecciati.
Per giunta il grep e' in un ciclo for per filtrare man mano tutte le 
directory che stanno nella variabile TUTTEDIR:
TUTTEDIR="/home/blabla/ /home/pippo/blabla /mnt/debianold/home/..."
Vedi io ho scritto il comando piu' o meno cosi':
for i in $TUTTEDIR; do
echo -e "\033[36m$(basename $i):\033[m"
$LL $i | grep -iE $1 | awk ... (oppure | sed ...)
eccetera....
 
Se mi spieghi in cosa consiste il pericolo di alias e di comandi 
depositati in variabili, nonche' di rielaborazione dell'output di ls,
mi fai un piacere e ti ringrazio in anticipo.
 
-- 
Tanti saluti
 

 directory che stanno nella variabile TUTTEDIR:
 
Sai che esiste find vero?
 
Non ho il coraggio di leggere oltre. 

 Non ho il coraggio di leggere oltre.
 
Neanch'io. Dunque ho fatto male a tornare a leggerti, ti diverti a dire 
cazzate e basta. Ti plonko va', stammi bene!  
 
-- 
Tanti saluti
 

Addì  lunedì 5 marzo 2012 20:26 Rodolfo scrisse:

Prima di tutto perché esiste find.
ls serve a vedere cosa c'è una directory e basta, per cercare un 
file c'è find. ls non tratta bene  i file con caratteri inusuali 
nei nomi, non tratta bene i ritorni a capo, non discende nelle 
directory. Inoltre il formato di uscita non è assolutamente 
standard, anzi tra tutti i comandi Unix è quello che presenta la
maggiore variabilità. quello che con find si fa con uno o due
test,  ls richiede passare nel cerchio di fuoco portando una coppa
di cristallo riempita di nitroglicerina..
 
Visualizzata l'immagine?
 
Così pure la sostituzione dei comandi:
 
tempname=$(mktemp /tmp/outputXXXXXXXXXX) ||
 { printf "impossibile creare file temporaneo\n" ; exit 1;}
 
va bene ma mettere tutto l'output  di un comando in una stringa 
per poi separare i vari token è da folli: redirigi il comando in 
ciclo while ed usa read.
 
Infine gli alias: sono molto utili per risparmiare di digitare 
comandi complessi o ripetitivi nelle shell interattive, negli 
script non servono ad un cazzo: per eviutare di battere i tasti 
c'è il copia-incolla, per gli altri usi ci sono le funzioni: 
più pratiche, più pulite, più leggibili,più manutenibli 
 
 
 
 

 leggibile, perche' c'ho "select" e "case" intrecciati.
 
Allora usa una variabile:
pippo=$(ls -al)
echo $pippo


 eccetera....
 
grep -iER $1 $TUTTEDIR
pare brutto? grep è già capace di ricorrere in tutte le directory e 
cercare il pattern in modo ricorsivo, senza incapsularlo in cicli inutili.
 
-- 
Massimo Bacilieri AKA Crononauta

 pare brutto? grep è già capace di ricorrere ...
 
Sì, bruttissimo. LL contiene un listato di una directory (ricavato 
per vie traverse): find è la soluzione  giusta.
 
 


No, dicevo grep -iER *al posto di* quella porcheria di $LL e dei 
millemila pipe annessi. Tanto mi sembra che alla fine il tutto serva a 
fare un grep dentro i file trovati ed estratti in modo perverso.
 
A quel punto si fa fare tutto a grep, che è fatto apposta, e gli si dice 
di "greppare" nelle directory iniziali da cui si voleva partire, *invece 
di* passare l'elenco delle dir a ls e fare i pipe.



Io credo che lui volesse fare grep sui nomi dei file, non sul contenuto.
 
 
-- 
Cio' che si vede, e'.
 

 di* passare l'elenco delle dir a ls e fare i pipe.
 
È un problema di interpretazione. Semplicemente non si capisce cosa
voglia fare l'OP. Ed il pessimo script che ha prodotto non aiuta; non ho
nè il tempo nè la voglia leggerlo. 
 
 

 Io credo che lui volesse fare grep sui nomi dei file, non sul contenuto.
 
Ciò non significa nulla. credo l'OP volesse dire:
 
"Trovare i file che corrispondono ad un determinato pattern"
 
o
 
"Cercare un file in certe directory"
 
La proprietà di linguaggio è la prima cosa. Come già detto da altri
tu non vai dal meccanico e dici: "L'automobile è rotta" o "Non 
funziona" ma dici: "Lo sterzo tira a destra" o "La frizione non 
stacca bene" o "Ho difficoltà ad inserire le marce".
 
Ed ancora: "Posta il tuo problema non la tua soluzione"

 Io credo che lui volesse fare grep sui nomi dei file, non sul contenuto.
 
Esatto, inoltre m'interessano anche le dimensioni in mega, in ogni caso 
i file li sposto o cancello o aggiungo, percio' non posso fare una 
lista fissa una volta per tutte.
 
-- 
Tanti saluti
 

 lista fissa una volta per tutte.
 
Qualcosa del tipo:
 
find directory1 directory2 ... -size 1M \( -iname '*.mp3' -o -type d \) -ls
 
o
 
find directory1 directory2 ...  \(  -iname '*.mp3' -o -type d \) \
 -exec /bin/ls -vgGd --group-directories-first --color=always \
 --time-style="+%d %b %Y" --block-size=1048576 {} \+
 
 
?