Il giorno ven, 16/12/2011 alle 15.47 +0100, Paolo Sala ha scritto:
[...] 
> Si ma mi sembra venga ignorato se ad esempio metti il tuo file in
> crontab oppure lo esegui con at (a meno che appunto non lo richiami con
> /bin/bash /path/tuo/bash/script)

Non mi pare. Prova: fai uno script e lo lanci da cron; dentro lo script
controlli la variabile SHELL e scopri qual è.

La shell corrente, se invochi un eseguibile con il bit «x» a posto, non
sta ad aprirlo per guardare se sia un binario o da interpretare, ma
invoca la chiamata execve() di sistema. Questa chiamata fa la verifica
in questione e chiama l'interprete giusto, ignorando completamente quale
eseguibile o interprete l'abbia invocata.

Se invece usi il comando "sh /path/tuo/script" stai facendo una cosa
diversa: la shell non invoca la execve() e si occupa invece di
interpretare il file passato come argomento.

Difatti, la funzione execve(), una volta che capisce che l'eseguibile
non è un binario, ma va interpretato, esegue l'interprete trovato nello
shebang aggiungendovi in fondo il nome del file da interpretare e tutti
gli eventuali argomenti ricevuti.

Il fatto che cron e at utilizzino una shell, è scelta obbligata in
quanto permettono di avere comandi complessi al posto di limitarsi ad
eseguire un solo comando. L'interpretazione di questi comandi è
demandata alla shell predefinita. Ma questa a sua volta userà execve().

«man execve» per alcune informazioni in proposito.

G.


--
Per REVOCARE l'iscrizione alla lista, inviare un email a
[email protected] con oggetto "unsubscribe". Per
problemi inviare un email in INGLESE a [email protected]

To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/1324048527.5735.40.camel@scarafaggio

Rispondere a