Ancora su j – Autojump e source

Il post su Autojump  è piaciuto. E pensare che l’idea ce l’avevo da parecchio tempo, non so quante volte ho cominciato a scriverci e poi lo abbandonavo perché non mi piaceva 🙂


OK, postandolo ci sono stati i commenti con suggerimenti e precisazioni. E adesso è tutto molto più chiaro. Vorrei allora chiudere l’argomento con questa breve nota, approfittando della vostra pazienza 😉

Il suggerimento di Marco Delmastro (il suo blog, Borborigmi  è über-yotta-mitico) di usare source funziona, da approfondire.

Il prof Lipari, glipari ha indicato il metodo usato da Autojump, un post di StackOverflow. Era stato glipari che mi aveva fatto conoscere Autojump e sospendere i miei tentativi di ricreare j con Linux.

Il commento di bit3lux / Luigi dà una soluzione che funziona ma “non è elegante“, come illustrato nel commento di glipari. Si vede che Luigi è troppo giovane: quando non c’era l’ambiente grafico ormai pervasivo il terminale era tutto per la shell. E potevi (OK, anche adesso) avviare una sub-shell digitando sh (non bash o csh, non usare mai quei nomi). Non so se il termine è corretto ma da noi si diceva che attivavi una sessione ospite. Con ctrl-D o exit uscivi da questa sub-shell e tornavi a quella precedente. Nulla vietava di annidare sub-shell per più livelli anche se 1) non so bene a cosa potesse servire; e 2) consumava memoria. Con tanti ctrl-D quanti erano i processi attivati tornavi alla shell originale; se ne battevi uno in più ti slogavi (c’era una variabile da settare per evitare che ciò avvenisse, la usavano solo i niubbi che allora si chiamavano pivelli).

Autojump di Joël Schaerer è perfetto, auto impara quali sono le directory che vengono usate e dimentica quelle vecchie; usa un algoritmo per indovinare quello che vuoi impiegando una regular expression (RegEx, RE) da paura. E poi Python è un linguaggio di script trendy e simpa (i francesi come Joël dicono così). Certo, seguendo l’indicazione di Marco si potrebbe fare a meno di Python, magari coinvolgendo Perl per la RE 😉

Non credo che mi avventurerò per questa strada ma per source ho provato a googlare un pochino. Ecco cosa ho scovato.

source
Avendo a disposizione il SysV Command Reference di Apollo, novembre 1989 ho voluto indagare se source c’era già in Unix-SysV. Pare di no. Il manuale ha la Section 1 –quella che m’interessa– e la Section 6 –games. I comandi sono in ordine alfabetico. A p.1-511 (si apre automaticamente lì) inizia SH(1), la Bourne shell, occupa le pagine fino a 1-523 compresa. Rimanda a pagine di SysV Programmer’s Reference che non ho. Non cita source.

CSH(1), la c-shell inizia a p. 1-91 e arriva fino a p. 1-115 compresa.
E c’è source, a p. 1-108, copio:

source name
Read commands from name. You may nest source commands, but if you nest too many deeply, the shell may run out of file descriptors. An error in a source at any level terminates all nested source commands.

source -h name
Place commands in the history list without executing them. Normally, input during source commands is not placed on the history list.

KSH(1), la Korn shell è descritta nelle pagine da 1-295 a 1-323. Ebbene sì Apollo permetteva di usare la shell che volevi, bash non c’era ancora. Nessun riferimento a source.

Idea per il futuro: se a qualcuno interessa potrei mettere le scansioni di queste pagine e magari incorrere nelle ire di HP.

A p. 1-528 c’è SORT(1) e a p. 1-529 SPELL(1) che continua anche sulla successiva, niente source quindi.

OK! source è nato in BSD e SysV non ce l’aveva. Mistero il motivo per cui tutti (a quanto pare) usassero la Bourne shell quando c’era la Korn, più nuova, almeno a giudicare da com’è ridotto il manuale.

E per Linux? Tanti, credo, sanno che si può usare source quando si modifica ~/.bashrc ma solo quello. Tranne Marco 😀 e pochi altri.
La googlata per source è stata fruttuosa, ecco

http://www.cyberciti.biz/faq/linux-bsd-unix-source-command/
nixCraft è un sito da bookmarkare, imho. Toh! lo dice anche qui che è BSD.

http://bash.cyberciti.biz/guide/Source_command
stesso sito, altra pagina, Linux (credo).

http://webtools.live2support.com/linux/period.php
Web Tools, lo sapete che source può essere scritta come . (punto, dot)? Da bookmarkare anche questo, sempre imho.

http://ss64.com/bash/
An A-Z Index of the Bash command line for Linux. Già che ci siete  bookmarkate anche questo.

Ah questa non la sapevo:


Visto: source – Esegue comandi da un file nella shell corrente.
Nella shell corrente.

Quante cose ci sono da imparare! E quante cose so di non sapere (cit.).
Riuscirò mai a diventare quasi-geek o rimarrò per sempre un aspirante-geek? 😉

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Marco  Il 22 febbraio 2012 alle 18:02

    C’è stato un periodo in cui il framework del software di ricostruzione di ATLAS poteva essere configurato sia cno tcsh che zsh. Ma a un certo punto il problema con source che descrivi (“if you nest too many deeply, the shell may run out of file descriptors.”) era diventato onnipresente (il software di ATLAS è parecchio complesso), tanto che usavamo una versione speciale di tcsh modificate per aumentare il buffer dei file descriptors. Poi abbiamo abbandonato tcsh del tutto, e poi siamo passati a python per la configurazione, ma questa è un’altra storia (anzi, due).

  • bit3lux  Il 23 febbraio 2012 alle 13:41

    Tanto giovane non sono, sto per entrare negli …anta. Ma come dice il mio barbiere, cui tremano le mani, “l’età è uno stato d’animo, beviamoci su!” 😉

  • juhan  Il 23 febbraio 2012 alle 20:31

    A dirla tutta ho scoperto una roba:
    command cd /tmp
    funziona. :-O

Trackback

  • There, aprire qui il terminale « Ok, panico su 17 luglio 2012 alle 12:33

    […] vero? I vecchi e gli smanettoni usano J / Autojump, io gli ho dedicato un paio di post, questo e questo. Ma non si può fare qualcosa nell’ambiente a finestre, come siamo abituati? Cerrrto! ecco […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: