[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: conversione a dash e RE



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.


Reply to: