Newsgroup: it.comp.macintosh
Titolo: [Terminale] Script?

Qualche tempo fa, in una discussione che verteva sull'automatizzazione
di alcuni 'task' ripetitivi, qualcuno (gomi no sensei, se non erro)
aveva suggerito come alternativa all'alias lo script.
In cosa differisce dall'alias, e come si deve procedere?
Nello specifico, vorrei automatizzare il backup di alcuni file su server
ftp.
E' possibile farlo mediante terminale, in modo che agisca in totale
autonomia (inserendo login e password preventivamente)?
Grazie in anticipo a chi sapra' darmi suggerimenti in merito.
-- 
http://www.dorelli.com
 - AIM: danmagma
In the shadow of the cargoes I take you one time
And we're counting all the numbers down to the waterline.

 autonomia (inserendo login e password preventivamente)?
certo che puoi farlo, e pure senza login e password se vuoi. poi il 
"come" farlo dipende da cosa vuoi che faccia esattamente  'sto programma 
:)
tieni comunque conto che grazie alla uh.. "peculiarita'" del file system 
di osx un semplice "cp" potrebbe non bastare. hai bisogno di comandi che 
tengano conto dell'abitudine del mac di mettere i dati un po' nel 
resource fork e un po' nel data fork. oppure puoi aspettare tiger che a 
quanto pare risolvera' 'sto problema una volta per tutte :P

 :)
Un esempio..? :)
Come si comincia uno script, e dove si deve salvare?
E per fare l'upload, posso usare ad esempio curl, dandogli in pasto
l'url, il percorso, login e password?
(dato che il comando "ftp" richiede l'interazione dell'utente)


 l'url, il percorso, login e password?
Non so  se la libreria  curl, sul cui  comando cur e`  basato, preveda
anche l'invio di dati.
Come  mi  pare di  aver  gia`  detto, io  uso  comunemente  scp ed  e`
comodissimo.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico e fancazzista 
\/

               will append the local file name.
Ho imparatop qualcosa :)
Grazie.


   volte una limitazione molto forte.
In tcsh sì, ma credo anche in bash.
-- 
Ci sono solo 10 tipi di persone al mondo: chi capisce il binario e chi
no.

 no.
Questa in  ufficio lascia la  gente allibita. E sarebbe  un'azienda di
informatica.
(defconst question "\([bb]\|[^b]{2}\)")
[Variazione sul tema di un'altra maglietta in vendita da ThinkGeek]


 (defconst question "\([bb]\|[^b]{2}\)")
Che starebbe per...?


 scrivo "ll nomedir" senza problema alcuno.
Sě, ma quello grazie alla semplice sostituzione dell'alias, non c'č
alcun passaggio di argomenti. Co tcsh potresti fare un alias del genere:
alias trova_e_sposta 'find ./ -name !:1 -exec mv {} !:2;'
e poi dare nel terminale
trova_e_sposta nome_file path_cartella
-- 
"I have a very simple life, I have my family and I have Apple and Pixar.
And I don't do much else." S. J.

 alias trova_e_sposta 'find ./ -name !:1 -exec mv {} !:2;
In realtà così c'è qualcosa che non va (a parte il \ che andrebbe
davanti a ; e che mi scordo sempre). Comunque ho reso l'idea, credo...
:-)


 alias trova_e_sposta 'find ./ -name !:1 -exec mv {} !:2;'
Lo fai con una funzione, che e` equivalente anche se espressa in modo
diverso. Tutte e due conservate in memoria, tutte e due accettano
parametri.


 Che starebbe per...?
E` una regexp. C'e` un errore comunque.
La forma corretta e` (defconst question "\(bb\|[^b]{2}\)")
In C dovrebbe essere
#define question bb || ! bb
se non ricordo male :)
(no, la soluzione non la do subito :) )


 (no, la soluzione non la do subito :) )
Ti rovino la suspance... (anzi la roto, cosě chi non vuole leggere non
la legge)
č vy irppuvb r nzyrgvpb qhoovb "gb or be abg gb or", rfcerffb va sbezn
vasbezngvpn. :Q
Ciao,
-- 
+--------+ | ASCII ribbon campaign ( ) | 
www.autistici.org/kral
|  kral  | |  - against HTML email  X  |
+--------+ |              & vCards / \ | my gpg id = 0x7C946947

 con "ll" che da sempre e per tradizione vale "ls -lA --color=auto"
una piccola parentesi: com'è che in bash questo alias non restituisce la
schermata 'colorata'? qual'è il trucco? grazie.

 c'e` una Faq apposta per i colori in bash
trovata! muchas gracias

 suvvia, non e` che sia difficile... :-)
APPUNTO :)


 suvvia, non e` che sia difficile... :-)
Più che altro non è difficile per chi mastica le regexp :)


 In realtà così c'è qualcosa che non va
Così va:
alias trova_e_sposta 'find . -name \!:1 -exec mv {} \!:2 \;'


 vasbezngvpn. :Q
Nuuuuu... ;-)

 comodissimo.
Grazie, lockato.
Ora vedo il man di curl, e se si puo' implementare questo upload in
poche righe.
Mi resta da sapere...:
1- dove devo salvare lo script, va bene ovunque?
2- come faccio per invocarlo
TYIA.


               will append the local file name.
Si', questo lo sapevo... TY.
I comandi nello script li separo con una semplice interruzione di linea,
vero?
Da ultimo, c'e' qualcosa che mi codifichi in .hqx o .bin (da terminale,
ovviamente) prima di fare l'upload, in modo da non perdere eventuali ed
importanti resource fork?
Ciao ^_^


 2- come faccio per invocarlo
Scrivi il nome.
-- 
Ve lo meritate Gil Amelio!

 Scrivi il nome.
Ah, cosi'?
Praticamente liscio liscio, come un alias... :)





 Praticamente liscio liscio, come un alias... :)
Fu la cosa che  mi piacque subito di Unix, i miei  programmi ed i miei
script  avevano  la stessa  dignita`  di  quelli  di sistema,  nessuna
particolare serie di comandi.


 lo fai con curl:
Funziona, ma con un altro server ftp (quello di Aruba) ho un problema,
c'e' una "@" di troppo e bash non capish.
curl -a -T "miofiledauppare.boh"
ftp://nomeu...@aruba.it:p
ass...@www.miodominio.com
(tutto su una riga)
Ho provato il backslash davanti alla prima chiocciola, ho provato con le
virgolette, ma non funzia... c'e' un modo per risolvere questa fesseria?
:)
Che ne so, col codice unicode del carattere "@"...?
TIA


 importanti resource fork?
Mi sto 'intrippando' con questa cosa dello script... :-)
Penso che se fatto bene possa automatizzare dei processi che fatti a
mano ogni volta sarebbero molto noiosi.
Di 'serie' su Panther abbiamo zip, tar, gzip, uuencode... quale di
questi posso usare per comprimere i file *preservando* la resource fork?
TIA


 TIA
Nessuno di questi.
Crea Archivio (dal menu del tasto destro del Finder) ti crea uno zip
che, se decompresso sempre da Panther (e non da StuffIt o da unzip) ti
preserva la resource fork. (Puoi vedere dove va a finire la resfork se
lo decomprimi con StuffIt o da windows con WinZip.)
Senno' ci sono sit o hqx, o le immagini disco.
 - ∞

 iveHelper da console fa contento anche me
Azz.
Me ne sono ricordato adesso: se non vado errato, BOMArchiveHelper altro
non e' che un front-end per ditto -c (o -x) --rsrc --sequesterRsrc, se
non mi ricordo troppo male...
 - ∞ 

 In tcsh sì, ma credo anche in bash.
ed invece si:
scrivi in  .bashrc
alias nome='path_e_nome_del_comando' $1
ad esempio 
alias miols='ls' $1
a questo punto basta lanciare il comando come
nome dell'alias segutio dal parametro
nel nostro caso 
miols -ls
La cosa penso che funzioni anche in tsch
alias nom='path_e_nome_del_comando' $1
Ovviamente puoi anche usare paremtri multipli.
-- 
Riccardo Saettone
Per rispondere togliere Alfa e Beta dall'indirizzo

 Crea Archivio (dal menu del tasto destro del Finder)
[...]
A questo punto mi tocca cambiare strategia.
Applescriptare il Finder (o la Standard Addition, non so dove sia il
comando stuff), comprimere i file che mi interessano, dopo di che
scriptare il terminale e con curl fare l'upload dei file.
Faccio prima, e con un doppio click parte tutto l'ambaradan.


 Faccio prima, e con un doppio click parte tutto l'ambaradan.
Leggi la mia reply piu' sotto: mi sono ricordato che il meccanismo usato
dal Finder usa l'utility terminale "ditto" con le opzioni -c e
--sequesterRsrc da linea di comando.
 - ∞



 /path/alla/roba
Per i profani, spiega un po' come funziona questa .app...?
Ho provata a lanciarla senza il path, ma non succede nulla (ovviamente),
e il manuale non c'e'.
Il Find di Finder non la trova, terminale si'.


 --sequesterRsrc da linea di comando.
Daro' una ultima chance proprio a questo ditto... :-))


 creare gli zip

 Il Find di Finder non la trova, terminale si'.
Perche' sta nella cartella Sistema. In Sistema -> Libreria ->
CoreServices.
 - ∞

theta <theth...@email.it.is.not.invalid> wrote:
[snip]
Altro effetto della Sindrome Zuppica da Casino.
Sorry.
 - ∞

 e il manuale non c'e'.
Passi a open una application. Quando dai open nomefile e` come se facessi
click sull'icona di nomefile...


 alias miols='ls' $1
Diavolaccio, funziona :)
Interessante.


 Interessante.
Scusa ma non capisco che stiate addi`...:
kallisti:~/cb alex$ alias miols='ls' $1
kallisti:~/cb alex$ alias miols
alias miols='ls'
kallisti:~/cb alex$ 
quel $1 mica va a far parte dell'alias, eh!
Alex

>---- On Day 5 of week 38 of 2004





E infatti dici quello che dissi io fintanto  che non feci l'alias
alias gatto=alias gatto='cat '$2' > '$1 
mi trovai questi risultati
cyrano:~ saint$ rm -f scarico
cyrano:~ saint$ gatto scarico .emacs ; ls -l .emacs scarico
-rw-r--r--  1 saint  saint  48104  7 Sep 08:45 .emacs
-rw-r--r--  1 saint  saint  48104 17 Sep 02:34 scarico
cyrano:~ saint$ diff -q scarico .emacs 
cyrano:~ saint$ 
e` stato effettivamente eseguito 
        cat .emacs > scarico


 Interessante.
e questo e niente ...
so anche come far passare delle variabili da uno script bash a uno 
applescript :)


 applescript :)
C'e` sotto un qualche truccazzo ?
Potrebbe essere untile, chissa`... pubblica :)


 quel $1 mica va a far parte dell'alias, eh!
Si fa parte dell'alias, $1 dice all'alias di aggiungere anche il primo 
parametro che incontra come parte del comando ls qunado questo viene lanciato 
tramite l'alias.
In pratica e` una variabile creata dal sistema dove vengono riposti i 
parametri dati ad un comando.
In pratica cosi puoi scrivere :
miols -la
ed avero lo stesso risultato che avresti scrivendo:
ls -la
Nel caso tu avessi far intepretare anche un secondo parametro poi usare $2 , 
per un terzo $3, ecc.
Occhio che per parametro si intende tutto quello che e` compreso tra due 
spazzi, questo obbliga l'utente a non tulizzare lo spazzio all'interno di un 
parametro, affinche questo non venga invece intepretato come due paraetri 
distinti, per ovviare a questoproblema ad esempio se si vuole passare come 
parametro il nome di un file od di una directory contenente spazi si possono 
usare i codici unicode, ma cis ono anche altri sistemi.
 
Sempre tornando al comando LS immagina di voler fare interpetare al tuo alias 
anche un secondo parametro dopo il primo, ad esempio vuoi avere informazioni 
solo su un file ho una directory particolare:
Normalmente dovresti dare il comando
ls -la nomedelfileodelladirectory.
in questo caso il comando ls a due parametri il primo $1 e` -la ed il secondo 
$2 e nomedelfileodelladirectory
Se vuoi farlo con l'alias ti basta creare l'alias in questo modo:
alias miols='ls' $1 $2
a questo punto di basta dare il comando:
miols -la nomedelfileodelladirectory.
Spero di esserti stato di aiuto.
PS
 a se ve lo state chiedendo con $0  bash identifica il comando stesso.
in pratica 
   ls    -la     miofile
   $0   $1        $2


         cat .emacs > scarico
Non riesco a capire esattamente cosa hai fatto qui.  Il comando alias
senza argomenti che ti dice?
Alex

 Spero di esserti stato di aiuto.
Temo di no, poiche` non trovo riscontro a cio` che dici, ne` nella doc
di bash ne` nel suo comportamento "sul campo".  Se c'e` qualche cosa che
mi sfugge su alias, function e argomenti in bash la imparero`
volentieri, visto che puo` sempre far comodo, ma sino a questo punto non
mi pare proprio di avere potuto imparare nulla da questo scambio di
idee.
Alex

 Provaci invece con un alias.
Io non saprei proprio pero` mi piacerebbe parecchio saperlo.


 Sara' che uso tcsh invece che bash?
Mi pare che tcsh supporti parametri negli alias (mentre bash dice di
usare le function invece degli alias).  Prova \!:1 (backslask
puntoexclamativo duepunti uno), entro le single quote che contengono
l'espansione del'alias, per far espandere li` il primo parametro... sono
ricordi vecchissimi, ma, un momento, provare costa poco...:
kallisti:~/cb alex$ tcsh
[kallisti:~/cb] alex% alias foo 'echo \!:1 \!:1'
[kallisti:~/cb] alex% foo ciao
ciao ciao
[kallisti:~/cb] alex% exit
kallisti:~/cb alex$ 
Da queste esaustive prove insomma parrebbe proprio di si`:-).
x completezza, l'equivalente bash:
kallisti:~/cb alex$ function foo { echo $1 $1; }
kallisti:~/cb alex$ foo ciao
ciao ciao
kallisti:~/cb alex$ 
Alex

 Io non saprei proprio pero` mi piacerebbe parecchio saperlo.
Secondo me non si puo` fare.  Come dice 'man bash', gli alias vanno
sostituiti con funzioni nella grande maggioranza degli usi.
kallisti:~/cb alex$ function bau { echo $2 $1; }
kallisti:~/cb alex$ bau moo miau
miau moo
kallisti:~/cb alex$ 
Nota che quel punto-e-virgola ci vuole (o alternativamente, come avevo
fatto prima, vai a capo e poi chiudi la graffa a capo, ma e` brutto, a
pensarci).  E la keyword 'function' e` meglio del goffo c-ismo 'bau()'
che avevo usato prima.  Tutto sommato, a scrivere
    function bau { echo $2 $1; }
non e` poi tanto peggio di un ipotetico(==NON funzionante!!)
    alias bau = 'echo $2 $1'
quindi capisco perche` il man bash dica di usare le function...
Alex


-- 
Ci sono solo 10 tipi di persone al mondo: chi capisce il binario e chi
no.

 x completezza, l'equivalente bash:
Di fatto, che differenza c'è tra un alias e una funzione?
-- 
Ve lo meritate Gil Amelio!

 Di fatto, che differenza c'è tra un alias e una funzione?
In  bash l'espansione. Ad esempio un alias una volta espanso non
viene piu` interpretato.
Se invece la funzione pippo contiene al suo interno pippo ottieni
una chiamata ricorsiva.


 senza argomenti che ti dice?
alias gatto='cat  > '
Ma come vedi nel dump che ho lasciato sopra, l'effetto di 
gatto scarico .emacs
e` eseguire 
#      $2      $1
cat .emacs > scarico
ovvero i parametri vengono onorati.
Hmmm dopo queste prove direi che probabilmente i parametri negli alias
sono  un qualcosa  si abortito  e non  piu` sviluppato  da considerare
"sporco trucco"


 Di fatto, che differenza c'è tra un alias e una funzione?
Bah, oltre alla sintassi, varie cose.  Una funzione puo` avere variabili
locali (col comando builtin 'local'), puoi metterla in 'trace', puoi
farla recursiva, insomma puoi farci di tutto un po'.  Un alias in bash
e` una semplice sostituzione testuale, una funzione e` "una cosa seria".
Che poi convenga fare programmazione seria in bash (o altro *sh) e` un
altro discorso...
Alex

 "sporco trucco"
Boh, a me sembra che non ci sia proprio nulla di strano in tutto questo,
ne` alcun bisogno di sospettare "qualcosa di abortito e non piu`
sviluppato".  alias fa una pura sostituzione di stringa, tutto qui.
Alex

 sviluppato".  alias fa una pura sostituzione di stringa, tutto qui.
Hmmm... Hai ragione. Sembra che onori il parametro come sospettavo all'inizio.


 sostituiti con funzioni nella grande maggioranza degli usi.
Probabilmente le limitazioni del comando alias vanno ricercate nel come e` 
stato pensato il comando, cioe` il comando alias serve solo a convertire il 
nome del comando e basta.
L'alias semplicmente rimanda i parametri al comando esattamente come tu li 
hai scritti.
Se hai bisogno di manipolare i parametri come hai detto tu usi la function.


 nome del comando e basta.
Esatto: converte un nome in (un nome seguito eventualmente da un certo
numero di parti INIZIALI del comando risultante).  Solo una sostituzione
di stringa, a tutti gli effetti.
Alex

 quindi capisco perche` il man bash dica di usare le function...
Beh, con l'alias non puoi fare altre cosine che a volte sono comode.


 tutto sommato!-)
Difficile ma non impossibile.
Ogni tanto mi capita di usare  if e il for della bash (praticamente un
mapcar) e` cosa per me comune.


 mapcar) e` cosa per me comune.
Secondo me questo tipo di costrutti e` altrettanto inadatto all'uso
interattivo (l'X-20%) quanto alla scrittura di programmi sostanziali
(l'Y+25%), ma nessuno dei due usi e` _impossibile_.
Alex

 Beh, con l'alias non puoi fare altre cosine che a volte sono comode.
Non mi viene in mente nulla che puoi fare con alias e non con function.
Mi fai qualche esempio?  Grazie!
Alex

 Mi fai qualche esempio?  Grazie!
Ricorsione se non erro. Non e` roba che si usa tutti i giorni. Ma se
ti serve e non la hai devi arrabattarti.
Un'alias  viene  espanso una  volta  sola,  se  viene incontrato  dopo
l'espansione rimane  immutato (se  no sai che  casino con  alias ls=ls
--color :) )


 (l'Y+25%), ma nessuno dei due usi e` _impossibile_.
Non capisco cosa intendi con uso interattivo. 
Anyway. Ho da ripetere la medesima operazione su n file nella stessa
directory, metto le operazioni in un ciclo for e fa tutto la macchina.
Tre o quattro righe di script usa e getta.
Qualche volta ci sta pure un if.
Sinceramente non riesco a vedere nulla di "inadatto".


 Sinceramente non riesco a vedere nulla di "inadatto".
Secondo me la sintassi di if, for &c non e` proprio pensata per questo.
Comunque in pratica io in condizioni analoghe mi trovo di solito a
scrivere un find, quindi non e` che la sintassi che uso io sia molto
meglio, devo ammetterlo.  Sara` un imprinting dai tempi in cui ho
imparato Unix io, la scelta di shell era: sh originale, o al limite csh.
Mi sono adattato a usare le feature extra di ksh e + tardi di bash negli
script, ma in interattivo tipicamente uso quel che era nell'intersezione
di sh e csh (piu` l'indispensabile bang per accesso alla history)...
Alex

 --color :) )
Naturalmente, e coi single quote puoi evitare l'espansione sulla destra.
Comunque la function equivalente a questo alias sarebbe:
function ls { command ls --color $@; }
Alex

 tutto sommato!-)
Io pensavo ai comandi tipo tar o cp o altro,  ad esempio come si fa` con 
python per fare un programmino che mi copia un file da una directory 
all'altra ?
ad esempio io ho questo e` parte di uno script che mi sono fatto per fare il 
backup giornaliero:
#!/bin/sh
LOGFILE="/isis/log/backup_cron_giornaliero.log"
OUTPUT=" tee -a "$LOGFILE
echo "" | $OUTPUT
echo "-------------------------------------------------" | $OUTPUT
echo "               Backup  Giornaliero               " | $OUTPUT
echo "              "`date '+%a %D %H:%M:%S'` | $OUTPUT
echo "-------------------------------------------------" | $OUTPUT
echo "" | $OUTPUT
echo "" | $OUTPUT
whoami | $OUTPUT
echo "" | $OUTPUT
DATE=`date '+%d-%m-%y_%Hh-%Mm'`
F_ALFA=$DATE"_Backup_All.tar.gz"
sudo -u alfa /utentealfa/puliscialfa  2>&1 | $OUTPUT
tar -czvf /$F_ ALFA /utentealfa/* 2>> $LOGFILE



Ciao,
-- 
+--------+ | ASCII ribbon campaign ( ) | 
www.autistici.org/kral
|  kral  | |  - against HTML email  X  |
+--------+ |              & vCards / \ | my gpg id = 0x7C946947

 tar -czvf /$F_ ALFA /utentealfa/* 2>> $LOGFILE
Se hai programmi esterni come sudo o tar che gia` fanno quel che ti
interessa, os.system e i vari os.popen ti permettono di riusarli.  La
funzionalita` di sudo, in particolare, non e` agevolmente duplicabile!
E auguri se mai dovrai portare un programma che dipende da sudo su di
un'altra macchina, Windows ecc ecc...
Quella di tar (e date!-), se vuoi, si duplica senza sudare troppo:
import tarfile, time
f_alfa = time.strftime('%d-%m-%y_%H-%M_Backup_All.tar.gz')
arc = tarfile.open(f_alfa, 'w:gz')
arc.add('/utentealfa', recursive=True)
arc.close()
(vabbe`, se vuoi il logging dettagliato devi sudare un minimo di piu`,
ma nulla di che...;-).  Il vantaggio naturalmente e` anzitutto uno di
portabilita` -- non hai bisogno di preoccuparti se la macchina su cui
giri abbia o meno tar e in che versione.  Poi c'e` la flessibilita`:
potresti usare 'w:bz2' e fare un archivio piu` compatto (puoi anche col
tar esterno, in molte versioni, usando j invece di z -- ma non e` detto
che tu non perda in portabilita`, vedi sopra;-).  Se vuoi essere un poco
piu` selettivo su quello che archivi, scrivere archivi standard Posix
(gnu tar li supporticchia, ma non del tutto, dipende dalla versione),
archiviare file con metadati in qualche modo alterati, ecc, ecc, avere
la compressione e scrittura del tarball completamente sotto controllo
puo` essere molto importante (gnutar ha un miliardo di opzioni, ma allo
stesso tempo sono troppe [da ricordare tutte;-)] e mai abbastanza [c'e`
sempre il caso N+1-esimo in cui manca quel nonnulla che ti costringe a
passare a find, magari con qualche filtrino di mezzo...;-)]...)
Ci sono anche piccoli vantaggi di prestazioni a usare tutto entro un
solo processo invece di far partire processini separati per ogni cosetta
tipo date -- a suo tempo questo era un punto importante a vantaggio di
linguaggi di scripting come ksh e poi perl, con tanta roba dentro
rispetto alla snellezza di sh, ma al giorno d'oggi e` piu` una
curiosita` storica se giri su di un buon Unix (incluso Linux e Mac).
Alex

 i tuoi gusti, Dawson e/o Lutz+Ascher possono essere preferibili.
dove lo trovo in rete ?


 programma su Windows (o VMS, o Mac OS 9, o un handheld con Palm, ecc).
Si era proprio quello che mi interessava, sapere se potevo reciclare anche i 
comandi normali del terminale.


 sia sempre necessario l'interprete...
Si`, ma su Mac (con Panther) fa parte del sistema e su Linux (volendo),
a parte che anche li` tipicamente e` di sistema, non e` difficile
cacciare dentro a un singolo eseguibile l'interprete+lo zip dei moduli.
Il problema se mai e` su Windows, dove l'interprete e` una DLL, e a
tutt'oggi mettere la DLL dentro l'EXE che la usa e` un problema (non
insolubile, ma comunque da mal di testa, soprattutto se vuoi girare su
varie versioni di Win, brrrr).
Il concetto di linguaggio compilato o interpretato non e`
particolarmente rilevante.  Puoi anche avere un JIT che genera codice
macchina al volo (psyco, ahime` solo per chip intel, non PPC), ma non
elimina la necessita` di una DLL o simile per il supporto runtime.  Ben
pochi programmi al giorno d'oggi sono costruiti SENZA richiedere nessun
supporto runtime (da DLL, so, dynlib secondo i sistemi, e` l'istess),
cioe` copiando al loro interno tutte le funzionalita` standard di cui
hanno bisogno (quei pochi li trovi tipicamente in /sbin e /usr/sbin,
anche sul Mac: sono programmini di sistema che devono poter funzionare
anche in casi di emergenza quando le .so/.dynlib per qualche ragione non
sono disponibili).
Alex

 passare a find, magari con qualche filtrino di mezzo...;-)]...)
Si infatti e` il vantaggio di usare un linguaggio compilato invece che un 
ambiente di scripting.
Mi hai proprio dato un aituo prezioso, ci metto su le mani e vedo.
Se mi riesce a sopperire hai problemi si ST nella gestione del TAPE, rifaccio 
tutti i mei script.


 dove lo trovo in rete ?
diveintopython.org
 -- li` trovi anche i link x italiano ecc ecc.
Alex

 senza che su questa ci sia Python, giusto ?.
e ho pensato che forse quel "make" gli aveva fatto fare un pň di
confusione e ho cercato di spiegargli perché secondo me non si puň.
Ovviamente la mia risposta non č stata esaustiva :)


 Ovviamente la mia risposta non è stata esaustiva :)
La risposta corretta, tutt'altro che esaustiva, e` "si puo`, si puo`, ma
e`, nel caso generale, un mal di testa tale che non val proprio la
pena".
Alex

 alias e non con le function...? 
Meta T sul testo. Devo essermi impaperato. Quello che intendevo e` che
ci sono cose che con gli alias NON fai e con le function si.
Si vede che certi post li scrivo mentre gioco a tresette con un paio
di poltergeist ed un barrow wigth:) ?


 imparato Unix io, la scelta di shell era: sh originale, o al limite csh.
Io  avevo solo  sh sulla  prima  macchina (AT&T  3B2 200),  poi ksh  e
finalmente -sulle Sun- la bash (che sotto X/OS non si compilava...).


> ti serve e non la hai devi arrabattarti.
Correzione alla correzione.
Non mi ero reso conto (sempre per via della partita a tresette) che
mi chiedevi un qualcosa appartenente all'insieme delle cose possibili
con alias ma non con function. 
Ero rimasto sul binario di questa frase
:: Beh, con l'alias non puoi fare altre cosine che a volte sono comode.
che  implicitamente definisce  le  cose possibili  con  alias come  un
sottoinsieme delle cose possibili con la funzione...


 ci sono cose che con gli alias NON fai e con le function si.
Ah, questo e` indiscutibile.  Apposta man bash suggerisce di sostituire
gli alias con le function nella gran parte dei casi.
Alex

 pena".
Aspettate la mia domanda presupponeva ovviamte solo la compatibilita` tra 
macchine che utilizzassero lo stesso sistema operativo e lo stesso tipo di 
processore.
Dunque ricapitolando:
Se io mi faccio uno programmino con Python su sul mio  "bel" pc pentium con 
su una distribuzione trustix  e lo compilo, come eseguibile, poi posso 
portarlo senza problemi su un'altro pc pentium che pero monta una 
distribuzione RH o debian e che magari non ha installato l'ambiente di 
sviluppo di python.
Questo e giusto o sbagliato ?
Se invece si tratta di sorgenti, posso poartli anche da trustix o debian a 
OSX a patto di fare i dovuti cambiamenti ad esempio nella gestione del 
filesystem o nella chiamata a librerie particolari.
Ho capito bene ?


 .  La 3.0 e` in
beta 3 da 2 settimane e mi sembra molto stabile.  Nondimeno, un
"programma" composto da UNA riga...:
print 'Hello, Frozen World!'
genera un eseguibile di 1160086 bytes -- praticamente tutti i runtime
sono stati copiati a braccio dentro a questo 'hello'.  Come se non
bastasse ci sono tre .so piccoline (45, 69, e 90 KB) per strop, pwd e
array (non servono, ma cx_freeze crede che servano).  _E_ in ogni caso,
come si vede (su linux) con 'ldd hello', ci sono comunque ANCORA delle
dipendenze da varie .so di sistema: libpthread.so.0, libdl.so.2,
libutil.so.1, libm.so.6, libc.so.6, _e_ /lib/ld-linux.so.2.  Tutta roba
di /lib, certo, ma vedi cosa intendo dire...?  Particolarmente per un
programma piccolissimo stai "spendendo" oltre un megabyte e _comunque_
fai affidamento su certe cose di base e di minima (librerie dinamiche di
sistema) che devono essere istallate sul sistema cui ti rivolgi...
OK, ammetto, ti sei tolto la dipendenza dai runtime di Python: che siano
o meno istallati sul sistema-bersaglio, quella 'hello' funzionera`
(purche` il sistema-bersaglio sia in effetti un Linux del giusto livello
e con processore tipo Intel, ecc ecc).  Ma secondo me non ne vale
proprio la pena.
Altro esempio: quel programmino di tar che ti mostravo l'altro giorno.
Quello si compila a 1273518 byte PIU` tre piccole .so che servono
(struct, time e zlib, fra i 58K e i 74K ciascuna) PIU` sei che non
servono (array, bz2, datetime, grp, pwd e strop) fra 44K e 90K eccetto
datetime che e` 156K.  Se ti chiedi perche` mai cx_freeze pensi che
tutte queste .so servono, pensa ad esempio a bz2.so (le altre vengono
per ragioni analoghe).  In quel programmillo aprivamo il file tar con
opzioni 'w:gz', sempre e solo quelle, mai altre, e in particolare non
usavamo main 'w:bz2'.  Ma questo dipende dal nostro flusso di dati, e
cx_freeze mica si mette ad analizzare a fondo il nostro programmino per
scoprire che non c'e` nessun 'if', nessun calcolo a runtime della
stringa delle opzioni di tar, ecc ecc, per cui salta fuori che zlib.so
(per il gzipping) ci serve e bzip2.so (per lo bzipping) invece no -- lui
vede sia zlib sia bzip2 come dipendenze del modulo tarfile, perche`
avendo importato tarfile POTREMMO usare le funzionalita` dell'una,
l'altra, o entrambe queste librerie di compressione, e allora le mette
nel mucchio, punto e a capo.  Fenomeni analoghi (per tutto il codice che
e` ragionevolmente ficcabile dentro all'eseguibile, piuttosto che non
posto in .so separate) spiegano la GROSSA fetta delle librerie standard
di Python che finisce dentro a quell'eseguibile, facendolo di 1160 KB
per "hello world", 1273 KB per il semplice tar... e se li porti in giro
entrambi, pac, due megabyte e rotti sprecati cosi`, perche` la copia
delle librerie sta dentro a ciascuno...?!
"Ma chi te lo fa fare?!" e` quindi la domanda che a me continua a venire
spontanea!  Poni i runtime che ti servono come prereq (dipendenza) del
tuo programma, e vivi sereno, no...?!
((Insisto: non e` che sarebbe molto diverso, che so, in C++.  Se riesci
a fare dei link "quasi statici" ti ritrovi dei pacconi ENORMI...!))
Alex

 tuo programma, e vivi sereno, no...?!
Si mi basta cosi e che non sapevo come dirlo.
per me e` piu` che sufficente che quando la vado a installare su un altra 
macchina lui mi dica occhio che ti serve questa e quest'altra libreria valle 
ad installare, mentre quest'altra libreria ancora che ti serve te la posso 
installare direttamente io.
E che essendo proprio alle prime armi spesso o dei problemi a capire quali 
librerie ci sono quali non ci sono ecc.


 librerie ci sono quali non ci sono ecc.
Eh, mica semplice anche scoprirlo da programma, se non usando i vari
strumenti allo scopo, come ldd per Linux ecc ecc.  Ma se provi a far
partire un programma e qualche libreria manca, dovresti ricevere un
messaggio d'errore dal sistema che ti chiarisce comunque la cosa, no?
Alex

 messaggio d'errore dal sistema che ti chiarisce comunque la cosa, no?
Boh io questo mica lo so, per questo chiedevo.
Con i pacchetti che trovo in rete non ho di solito problemi perche` 
solitamente sono accompagniati da un bel file readme che dice di quali 
libreria a bisogno il programma ed a volte dice anche dove andare a trovarle.
Ad esempio con gli .rpm  prima di intallarli io provo con il classico 
--test e con -R per sapere di qualli altri pacchetti o librerie hanno 
bisogno, oppure se ci sono dei problemi tra le librerie che ho installate e 
quelle che richiede il programma..
Ma se una applicazione la faccio io magari posso non sapere che una libreria 
dipende da un altra per funzionare.
Ovviamente la risposta e` che mi devo studiare prima il funzionamente delle 
librerie che sto utilizzando  giusto ?
Comunque grazie per tutte le risposte che mi hai dato.
Ora raccato tutto il meteriale che mi serve e comincio a studiare.


 Ora raccato tutto il meteriale che mi serve e comincio a studiare.
Prego, e buono studio.
Alex