Newsgroup: it.comp.os.linux.sys
Titolo: Alias da shell e non solo

Non saprei bene dove chiederlo magari qualcuno qui può aiutare.
Non è che sia un problemone ma sui progetti su cui lavoro vorrei avere
degli alias comodi per andare velocemente da shell
EARTH_DOMINATION="/very/long/path"
e così via, però siccome spesso uso anche ipython e ancora più spesso
emacs mi piacerebbe che questi 3 restino sempre allineati.
Anche perché poi ogni tanto faccio pulizia sugli alias che non mi
servono più e vorrei evitare di farlo per tutti.
Qualche idea?

Andrea Crotti ha scritto:



li aggiungi in .bashrc
ciao 
bluto
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ...
E a che c**** ti servono gli alias?
Ah già, a causare problemi.
ln -s /very/long/path  very.short.path


Perché emacs e ipython considerano .bashrc?
Al momento li ho in .bash_profile e nessuno se li caga :D

 ln -s /very/long/path  very.short.path
Mm non è che metter links di quel tipo mi esalti come idea, quali
sarebbero i problemi provocati dagli alias?

 Qualche idea?
  Io userei dei simlink.
  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.
Chiave PGP/GPG: EC885A8B

 ...
I link (fisici o simbolici poco importa) sono stati inventati proprio 
per risolvere situazioni come le tue. Usali.

 per risolvere situazioni come le tue. Usali.
Sto seguendo il consiglio e in effetti non so perché non ci ho pensato
prima.
Ho però trovato almeno 2 problemi:
- non posso saltare a un symlink ovunque io sia (cosa fattibile con gli
  alias)
- se ho path->very/long/path e faccio
  cd path
  cd ..
  non va in long ma torna in $HOME, e questo mi rompe un po' le balle
  (perchè poi?)


trasforma gli alias in script.
esempio stupido:
crei il file eseguibile /usr/local/bin/gg
e ci schiaffi dentro:
#!/bin/bash
/bin/ls -la $1
Il problema è che ti accetta solo un argomento o zero argomenti, quindi 
dovresti elaborare gli script in modo da valutare prima il numero di 
argomenti e poi... una palla.
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
   printf $i }'; echo

 I link (fisici o simbolici poco importa)
beh ... importa molto invece.
A proposito dei link, mi inserisco con un altro problema nel problema. 
Il problema è senza soluzione, o quasi......
Problema 1)
i link fisci funzionano solo tra file che risiedono sulla stessa partizione.
Ciò detto, ho un ambiente chroot nel quale gira apache+php. Mysql invece 
gira sull'host principale.
Ciò che non riesco a fare è connettermi a mysql tramite sock (poiché il 
sock-file non è raggiungibile dalla gabbia) e sono obbligato ad usare la 
connession TCP.
Problema 2)
un link simbolico, all'interno della gabbia, risulterebbe un broken-link 
poiché punterebbe al di fuori della gabbia e la gabbia non potrebbe vederlo.
Problema 3)
non è comunque possibile creare link verso i socket file, sia simbolici, 
sia fisici.
Possibile soluzione: si può avviare mysql dicendogli di creare più sock 
file? Io ho provato e sembrerebbe di no. E' posibile specificare la 
posizione del sock.
p.s.
se può essere d'aiuto per qualcuno: il client mysql (e anche php) 
considerano 'localhost' e '127.0.0.1' in maniera differente. Se gli 
scrivi localhost lui prova la connessione socket, se gli scrivi 
127.0.0.1 usa la connessione tcp.


 numero di argomenti e poi... una palla.
Sì potrebbe anche fare, ma io non voglio fare un ls del path, voglio
andarci!
Quindi al max dovrei fare:
#!/bin/bash
cd $HOME/path
Questo però mi obbligherebbe a lanciare comandi invece di saltare tra
bookmarks in ipython e emacs...
L'unica cosa che non capisco dei symlink è perché diavolo se faccio
cd ..
mi ritorna nella $HOME e non mi va nel ramo superiore dell'albero.
A lui che gli cambia in fondo come ci è arrivato? Non posso dirgli di
non "ricordarsi" cosa l'ha portato lì?

   (perchè poi?)
Perché la directory di lavoro è ~/path e non ~/very/long/path
Osserva bene:
[mallin ~]$ pwd
/home/mallin
[mallin ~]$ mkdir a a/b a/b/c
[mallin ~]$ touch a/b/c/{1,2,3}
[mallin ~]$ ln -s a/b/c x
[mallin ~]$ ls a/b/c
1  2  3
[mallin ~]$ ls x
1  2  3
[mallin ~]$ cd x
[mallin  x]$ pwd
/home/mallin/x
[mallin x]$ ls x
1  2  3
[mallin x]$ cd ..
[mallin ~]$ pwd
/home/mallin
[mallin ~]$ cd a/b/c
[mallin c]$ pwd
/home/mallin/a/b/c
[mallin c]$ ls
1  2  3
[mallin c]$ cd ..
/home/mallin/a/b
[mallin b]$ pwd
/home/mallin/a/b
[mallin b]$ cd
[mallin ~]$ pwd
/home/mallin
[mallin ~]$ 
PS cd da solo torna alla propria home mentre cd - ritorna alla directory 
 precedente. Impara ad usare il comando dirs

 /bin/ls -la $1
A parte la polemica su dove mettere i propri script, in local opt od ~, 
quello che vuoi fare tu si fa così:
#!/bin/bash
/bin/ls -la "$@"
...
A te trovare la differenza tra $@, $* e "$@"


Facebook: Massimo Bacilieri

  [taglio]
Apri un altro thread.
PLONK

 generico.
Sì ottimo questo risolve, direi che potrei essere soddisfatto ora...


PLONK.



PLONK


 Ah già, a causare problemi.
PLONK


Oh mamma mia che due balle con questi plonk, mi ricordano un po' i tempi
dell'asilo e i vari "non mi hai fatto niente faccia di serpente" e così
via :D
Tornando a noi, sono in effetti partite affermazioni mirabolanti senza
un minimo di argomentazione:
quali sarebbero questi grandiosi problemi generati da alias e scripts??
PS. un altro problemino usando link simbolici è che con emacs rischio di
aprire due volte lo stesso file visto che il path è considerato
differente, ma immagino si possa aggiustare anche questo.
Diciamo che una soluzione più intelligente sarebbe stata preferibile,
magari un giorno la troverò...

 differente, ma immagino si possa aggiustare anche questo.
Se apri i file /ad/ /mentulam/ /canis/ forse.
Spiega il tuo problema e non la tua soluzione.


Sarà pure il modo classico ma non è poi molto meglio del sistema che
usavo prima (che a sentire te pare una cazzata enorme).
E comunque c'è modo e modo di rispondere.
Ma mi spiego meglio, quello che voglio è un'affare che mi tenga questi 3
"bookmarks" sincronizzati
Al momento l'idea che mi viene è un hook in emacs che quando manipolo i
bookmarks mi vada a chiamare qualche funzione che mi modifica e ricarica
i bookmarks in .bashrc e .ipythonrc.
Questo sarebbe perfetto, usare i link simbolici risolve solo in parte e
make non c'entra un tubo, sono tutti progetti completamente separati tra
loro...

 loro...
L'uso di make non è limitato alla compilazione di programmi ma poà 
essere usato efficientemente per la manutenzione dei filesystem, per
l'aggiornamento automatico o per altri mille compiti nell'aministrazione
dei sistemi (penso che possa fare anche il caffè :-).
Vedi i tuoi file *.rc come programmi oggetto  ed i segnalibri come dei
fle di intestazione da includere e l'uso di make ti verrà spontaneo.
Comincia da qui:
http://www.ibiblio.org/pub/docs/unix-tutorials/courses/make.ps


Non avevo scritto molto perché immaginavo fosse un problema comune, ma a
quanto pare non è così...
Comunque, ammettiamo che stia lavorando su x,y,z, dove x,y,z possono
essere qualsiasi cosa, da un corso universitario a un progetto a una
lettera personale.
Ogni tanto mi piace cambiare e oltre ad avere molte shell aperte e varie
screen + elscreen su emacs comunque mi trovo spesso a saltare da uno
all'altro.
Quindi ogni volta dovrei dare un cd /very/long/path
siccome uso anche ipython e emacs uso anche i loro bookmarks, vorrei
semplicemente che da questi 3 "sistemi" si salti comodamente alle stesse
posizioni nel filesystem, tutto qui...
Make l'ho usato parecchio ma non capisco come caspita dovrebbe c'entrare
in questo ambito...

 in questo ambito...
Il tutorial che ti ho consigliato mostra alcuni esempi dell'uso non standard 
di make. Mi sembra che mostri come aggiornare gli alias di postfix tra 
l'altro; se si trattava di aggiornare bash.rc o simili  questo andava a 
pennello.

 posizioni nel filesystem, tutto qui...
Non ho letto tutto il thread, ma assegnare delle variabili d'ambiente?
Esporti le variabili (eventualmente da .bashrc per quelle permanenti) e poi
fai riferimento a quelle.
export X=/very/long/path1
export Y=/very/long/path2
export Z=/very/long/path3
cd $X
cd $Y
cd $Z
In tutti gli editor seri e in tutti i linguaggi e gli ambienti di scripting
puoi fare riferimento alle variabili d'ambiente:
Emacs
http://www.gnu.org/s/emacs/manual/html_node/elisp/System-Environment.html
Vim
http://www.adp-gmbh.ch/vim/vars.html
ipython
os.environ
-- 
Flavio Visentin
Ubuntu in Zulu significa "Non so usare Debian". (cit. CtRiX)


infatti sono roba da asilo :D non ho mai plonkato nessuno in vita mia e 
mai lo farò. Lo sto solo prendendo un po' per il culo.


 infatti sono roba da asilo :D non ho mai plonkato nessuno in vita mia e
]zac[
... solo che ploncare qualcuno più di una volta è come continuare a ripetere 
con te non parlo più ...

 writes:

Caspita giustissimo come ho fatto a non pensarci prima :D
Eppure le uso pure delle variabili per cose molto simili, è vero che a
volte l'idea più giusta ce l'hai sotto il naso e non la vedi!
L'unico inconveniente è il "$", però almeno non ho le scocciature di
link simbolici e alias in compenso.

 writes:
Per ipython si può fare qualcosa del genere comunque 
--8<---------------cut here---------------start------------->8---
def cdb(var):
    import os
    path = os.getenv(var)
    if path:
        try:
            os.chdir(path)
        except OSError:
            print "path not found, fix the variable"
        else:
            print "succesfully moved to %s" % path
    else:
        print "variable not set"
--8<---------------cut here---------------end--------------->8---
non passando argomenti potrebbe diventare interattiva con tutti i path
che trova in os.environ, e poi direi che sono a posto