Vai al contenuto

Strano comportamento eseguibile unix su Mac


emimun

Messaggi raccomandati

Ciao a tutti.

Stavo facendo un eseguibile e mi sono accorto che Mac lo gestisce in maniera strana.

Faccio un esempio semplificato. Immaginiamo di voler fare un eseguibile contenente solo la seguente riga:

mkdir lamiadir

Immaginiamo di mettere questo eseguibile in una cartella diversa dalla home, ad es. su una penna usb. Bene, quando lo lancio col doppio click sull'icona Mac esegue quel comando ma partendo dalla home, e non dalla posizione dell'eseguibile. Quindi la cartella "lamiadir" verrà creata nella mia home.

Ho provato a fare la stessa cosa su linux e quest'ultimo si comporta correttamente, creandola nella posizione dell'eseguibile.

Avete idea di cosa possa essere?

Link al commento
Condividi su altri siti

Immagino tu stia parlando di uno script bash.

Il comportamente comunque mi sembra corretto.

Quando tu fai doppio click ti si apre il terminale nella directory di default, che è la home, e poi vengono eseguiti i comendi dello script.

Dato che tu sei nella home, il comando fa riferimento alla home.

Se vuoi fare riferimento alla cartella in cui si trova lo scritp puoi usare una cosa del genere:

workDir=$(dirname $0)
mkdir $workDir/nomecartella

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Immagino tu stia parlando di uno script bash.

Il comportamente comunque mi sembra corretto.

Quando tu fai doppio click ti si apre il terminale nella directory di default, che è la home, e poi vengono eseguiti i comendi dello script.

Dato che tu sei nella home, il comando fa riferimento alla home.

Se vuoi fare riferimento alla cartella in cui si trova lo scritp puoi usare una cosa del genere:

workDir=$(dirname $0)
mkdir $workDir/nomecartella

Grandissimo!!! Funziona a merviglia!

Chissà perchè però linux non aveva bisogno di questo, eseguiva il comando direttamente nella posizione dell'eseguibilie.

Ti ringrazio tantissimo.

Ho letto le istruzione di "dirname" ma mi sfugge come lavora nel caso che mi hai illustrato. Immagino che quel $0 in qualche modo passi la posizione dell'eseguibile. Sapresti darmi qualche info sulla sintassi usata?

Ti dico anche a cosa mi serve fare questo script, magari torna utile a qualcuno. Vorrei fare un eseguibile (a cui poi metto l'icona di un cestino vuoto) e lo metto dentro alle pennette usb. Con un doppio click elimina il cestino della pennetta e così posso svuotare il cestino della penna senza andare a toccare quello di sistema (e senza dover ogni volta da terminale andare a d eliminare .Trashes dalla pennetta...).

Grazie ancora!

Link al commento
Condividi su altri siti

La variabile $N contiene l'argomento N del comando eseguito.

Dato che l'argomento 0 è sempre l'eseguibile stesso, con $0 ottieni il percorso dell'eseguibile.

$1, $2, ecc naturalmente conterrebbero gli eventuali argomenti passati allo script.

$@ inceve contiene tutti gli argomenti in una sola variabile.

Racchiudere un comando tra $( e ) fa si che alla variabile venga assegnato il risultato del comando stesso.

In questo caso quindi ottengo la directory dello script passando al comando dirname il percorso dello script stesso.

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

Grazie mille, sei stato gentilissimo.

Vorrei fare una pignoleria, ma al solo scopo di imparare cose nuove. Inizialmente avevo chiamato lo script svuota_cestino_penna e funzionava perfettamente. Poi l'ho rinominato "svuota cestino penna", cioè usando tre parole staccate. A questo punto non ha funzionato più. Forse perchè $0 individuava solo la prima parte del nome e non tutto?

Ad ogni modo grazie ancora.

Link al commento
Condividi su altri siti

Uhm... mi sembra strano.

Secondo me è più probabile che sia il comando dirname a fermarsi prima, non tanto l'argomento stesso.

Fai qualche prova, tipo con echo $0 e vedi che dice. :)

Se faccio echo $0 mi restituisce il percorso compreso però il nome del file.

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...