Newsgroup: it.comp.os.linux.iniziare
Titolo: [principiante] creare un file eseguibile

Spesso mi capita di aprire un Terminale e di dover "entrare" in una
directory "lontana":
cd directory1\directory2\directory3\directory4\directory5
Avevo allora pensato di fare un programmino di nome "vai" che mi facesse
questo in automatico. Ho creato quindi il file "vai.exe" (domanda: posso
chiamarlo anche solo "vai" senza ".exe"?), l'ho editato e gli ho scritto
dentro la linea di comando sopra indicata, e infine gli ho dato
l'attributo di eseguibilita'. Quando lo lancio pero' mi da' l'errore:
bash: vai.exe: command not found 
Cosa altro devo fare perche' la cosa funzioni?
Grazie, Fabio.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Cosa altro devo fare perche' la cosa funzioni?
Chiedere in un newsgroup dedicato a Windows per esempio?
-- 
Vide
echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc

 Chiedere in un newsgroup dedicato a Windows per esempio?
Se c'era dell'ironia, non l'ho capita. Ho Ubuntu, non Windows. Se sto
facendo un ragionamento "alla Windows" che in Linux non ha senso, ti
pregherei di essere piu' costruttivo e indicarmi dove sbaglio.
Fabio


 Grazie, Fabio.
Prego!
Buona serata!
Gabriele

 pregherei di essere piu' costruttivo e indicarmi dove sbaglio. 
dove l'hai messo?
inoltre, all'inizio del file c'è la riga seguente?
#!/bin/bash
r
-- 
eh-ho!
[Alan Sorrenti: Come un vecchio incensiere all'alba di un villaggio deserto]
tutto sui Pentangle: 
http://umpf.net/

> l'attributo di eseguibilita'. Quando lo lancio pero' mi da' l'errore:
[cut]
piccola nota: con chmod + x nome_file, hai modificato i permessi del 
file e non l'attributo che è un altra cosa.
Per vedere cosa sono gli attributi dei file in linux:
man chattr
o guarda qui:
http://www.maconlinux.net/linux-man-pages/it/chattr.1.html


 Cosa altro devo fare perche' la cosa funzioni?
1) creare nella tua home una directory bin
2) mettere questa directory nel PATH
3) spostare il tuo script in questa directory
   (o metterci una copia od un link)
Oppure:
digitare:
./vai.exe

 che è un altra cosa...
Questioni di lana caprina: i permessi *SONO* degli attributi 
di un file. Altri attributi sono la dimensione, i 
timestamp, il numero di link, il gruppo, il proprietario,...
Quegli attributi che si manipolano con chattr sono gli
attributi di estesi di ext2; se non usi ext2 non li hai.
Dimenticavo: in fondo anche le ACL sono degli 
attributi di un file.

 
ed hai ragione pure qua! il fatto di aver sempre chiamato "attributi" 
quelli modificabili con chattr mi ha "confuso".
chiedo venia :)
Un saluto!
Gabriele

 #!/bin/bash
Non serve.
Cioe` e` una buona usanza iniziare uno script con 
lo sha-bang ma uno script si puo` eseguire anche 
se non la ha. 
E poi nel caso in questione non e` questo il 
problema. Dai, e` solo un pivello ;)

 pregherei di essere piu' costruttivo e indicarmi dove sbaglio.
Nessuna ironia, parlavi di ".exe" e il percorso era tutto con barre al
rovescio \percorso\directory, non hai nominato la parola "linux" o "ubuntu"
in tutto il messaggio, è pieno di gente che chiede aiuto su NG che non
c'entrano nulla col problema che hanno, per cui chiedevo se per caso fosse
un problema con Windows.


 pregherei di essere piu' costruttivo e indicarmi dove sbaglio.
Sbagli a ragionare come se fossi in windows, per due motivi:
1) usare "\" invece di "/" (forse per questo Vide pensava che il problema
fosse su windows)
2) chiamare "programma" quello che invece non è nemmeno un eseguibile bensì
uno shell script, e volerlo nominare con un ".exe" che in unix non è
necessario.
edita il tuo script mettendo come prima riga (anche se non è strettamente
necessario)
#!/bin/bash 
e aggiungi i comandi che vuoi eseguire; per eseguire lo script, lancialo
con
./vai
oppure con
sh ./vai
Tieni presente però che al termine dell'esecuzione di uno script, torni
esattamente dove eri, cioé un semplice comando di cambio directory, come
quello che vuoi fare, verrà eseguito ma al termine dello script il
controllo ritornerà nella directory da cui hai lanciato lo script. E' il
caso che nello stesso script vengano eseguiti anche i comandi che vuoi
eseguire.
-- 
http://www.emmeeffe.org
"Ho capito cosa intendevi con il tuo 'ingegnere... sigh' quando ho visto
mio figlio, appena laureato in ingegneria, preparare il sugo per le
lasagne: tagliava i cubetti di carne tutti uguali, e quelli che venivano
diversi li buttava via"

 cd directory1\directory2\directory3\directory4\directory5
Tralasciando tutto quanto detto in questo thread...
usare un link simbolico?
ln -s directory/in/culo/ai/lupi/ nomecorto && cd nomecorto/

 un problema con Windows.
Ma sai che la storia delle barre al rovescio l'avevo pensata? E ho pure
ricontrollato dopo il tuo post, e le ho pure viste "giuste". Pura
allucinazione. Ti devo le mie scuse.
Grazie a tutti gli altri per i suggerimenti, ora li provo un po' tutti e
poi vi sapro' dire dove mi intoppo. ;)


 Grazie, Fabio.
Apri un terminale e scrivi:
alias vai="cd directory1/directory2/directoryn"
batti "vai" e ti trovi nella directoryn
Riporta tutto in uno script con un nome qualunque (exe non serve)
ed hai il tuo "vai.exe".
Saluti.

 Grazie, Fabio.
Ciao,
Non vorrei smorzare il tuo entusiasmo, ma dovresti prima leggere un po' 
di cosette su linux, per esempio una guida allo scripting bash tanto per 
iniziare... ma forse potresti partire con il leggere la guida di 
ubuntu... se non lo fai commetti l'errore di ragionare alla windows 
maniera il che ti comporta piu' problemi (tanto per dirne uno mettere 
l'estensione exe ) che agevolazioni...un po' come andare in un paese 
straniero senza essersi informati sulle usanze locali.
Ciiips
Aragorn

 impara ad usare dirs, popd, e pushd.
Lo faro' quando saro' un utente piu' esperto. Ma nel corso di Linux di 40
ore che ho fatto questo non c'era, e "sento" che ci puo' essere una
soluzione piu' semplice.
Grazie comunque, ciao.


 2) lo lanci con ./vai.exe (o ./vai)
***inizio file
#/bin/bash
cd Desktop
*** fine file
fabio@pc:~$ ./vai
fabio@pc:~$
No, non funge.
Fabio


 #!/bin/bash
Inserire lo sha-bang (termine che ho appena imparato dal Sommo Guru), che
sia  #!/bin/bash come consigli tu oppure #/bin/bash come mi consigliano in
un altro post, non funge. Nemmeno toglierlo del tutto funge (ahi ahi ahi,
Sommo Guru...)! :)
Ah, provo sempre a lanciarlo come ./vai, eh!
Ciao, Fabio.


 eseguire.
Ah, ecco perche' non mi funzionava, sha-bang o non she-bangs (una
citazione dotta per chi ama la musica pop)!!!
Mille grazie, non ho la soluzione ma almeno ora so dove sbaglio.


 ln -s directory/in/culo/ai/lupi/ nomecorto && cd nomecorto/
Questo mi andrebbe bene (i link simbolici nel mio corso di 40 ore
c'erano!), se mi insegni due cose:
1. Come faccio poi a controllare quali e quanti link simbolici ho creato?
(Questo mi serve se poi faccio questo trucchetto piu' volte e "perdo il
filo" dei miei vari "vaiqui" e "vaili'" che mi sono creato)
2. Col tuo suggerimento intendevi forse le due righe separate:
ln -s directory/in/culo/ai/lupi/ nomecorto, da fare una sola volta 
cd nomecorto, da fare ogni volta che serve?


 ed hai il tuo "vai.exe".
Ottima soluzione, simile a quella dei link simbolici, e anche questa senza
strabordare dalle mie (scarsissime) conoscenze. Tre domande (la prima
identica alla soluzione dei link simbolici):
1. come faccio a ricordarmi quali e quanti alias ho creato nei mesi, dopo
che avro' usato questa soluzione per mesi?
2. se riporto in uno script e poi lancio lo script, alla fine non mi
ritrovo sempre nella directory di partenza al termine dello script (ossia
non mi succede il motivo analogo per cui non funzionava la mia idea
iniziale dello script)?
3. quale soluzione e' da preferire tra questa e quella del link simbolico?


 che avro' usato questa soluzione per mesi?
se non ricordo male basta digitare alias;
r
-- 
se sapete usare Windows allora sapete usare Linux
http://www.umpf.net/ramapage/slack.htm

 iniziale dello script)?
e in italiano sarebbe? :)
se ho capito hai detto che se cambi directory all'interno di uno script,
resti in tale directory anche quando lo script termina.
Falso, ti ritrovi esattamente dove sei partito, con le stesse variabili
d'ambiente etc etc
NB: il file .bashrc  NON č uno script (cioč eseguito dopo una
fork), ma un insieme di comandi che servono a configurare la shell
attuale , insomma dati in pasto a "source". 
quando esci da
quest'ultimo


 Mille grazie, non ho la soluzione ma almeno ora so dove sbaglio.
la soluzione migliore ti è stata suggerita: un link simbolico alla
directory di destinazione, poi fai cd <link>


 1. Come faccio poi a controllare quali e quanti link simbolici ho creato?
ls -l
Tra i file elencati, i link simbolici sono quelli che iniziano per l,
per esempio:
lrwxrwxrwx 1 fabioxxx fabioxxx      16 2007-01-23 20:23 vai -> /dir1/dir2/dir3/dir4/dir5
-- 
*** Linux  user #86962 ***
*** Ubuntu user #10853 ***

 No, non funge.
Non lo puoi sapere, se funge. :-)
O meglio, sicuramente non ha gli effetti che tu speravi avesse, e
invece, magari, ha funzionato benissimo.
Per capire perche' c'e' questa strana distinzione, dovresti imparare
cosa e' una shell, cosa e' una shell figlia, e il concetto di AMBIENTE
in cui la shell viene eseguita.
Ammesso che il tuo scipt sia formalmente corretto, ecco cosa succede:
Lo lanci, e la shell richiama una shell figlia, cui fornisce una copia
dell'ambiente.
Il tuo "cd nomedelladirectory" agisce nell'amiente in cui si trova,
percio', se nello stesso script esegui qualche altra funzione, essa
verrebbe eseguita nella directory voluta.
Ma appena lo script finisce, cessa di esistere la shell figlia, e si
ritorna nella shell precedente, con tutto l'ambiente precedente.
Se vuoi proseguire sull'uso dello script per cambiare valori di
ambiente, (variabili, path corrente, e simili) devi usare il
source, che si abbrevia con il punto.
Cosi', facendo ". ./vai" (senza le virgolette) finiresti nella
directory desiderata.
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

 preferire tra questa e quella del link simbolico?
I link simbolici.