Re: bash in at command

2022-10-05 Per discussione Alessandro Rubini
>>> strano... da shell at legge l'interprete da utilizzare dal file stesso
>>> mentre con l'opzione -f lo esegue con /bin/sh.

No. Il comportamento e` uguale: passare da stdin o con "-f" con cambia
niente: viene salvato da qualche parte per poi essere passato a /bin/sh.
Cosi` dice la documentazione, cosi` ho fatto vedere che si comporta
(dire se uno script asincrono ha fallito o no non e` banale, fargli
fare "ps $$ > /dev/tty" e` facile e da` risultati certi. Si veda
il mio messaggio.

> Comunque sia che si lanci lo script da shell at, con il comando at -f, 
> direttamente da shell sh o con il comando sh -c, viene utilizzata sempre 
> la stessa shell /bin/sh

Se faccio "sh -c" ovviamente parte sh. Se faccio "bash -c" parte bash.

> Probabilmente chiamare at con il parametro -f  [...]

Ragazzi, e` tutto *molto* piu` facile. "at" e` vecchio, e come tale
usa /bin/sh come interprete. Probabilmente niente, e` cosi` e basta.
Ricordiamo che le cose fatte bene sono facili, senza casi speciali.
"-f" non e` un caso speciale, e` *come* dare da stdin.

> [...] fara` direttamente una chiamata execve (che non so cosa sia ma
> riporto quel che hai scritto tu) al kernel che mi sembra di aver
> capito non va a leggere la shebang dello script...

Invece e` proprio l'opposto.

Se un eseguibile e` eseguibile, viene eseguito (che sia python o che,
se ha il suo #! o altri trucchi a posto, dopo "chmod +x" e` eseguibile
ed esegue).  Se invece qualcuno dichiara di volere un testo
da passare a /bin/sh, lo passa a /bin/sh. E "#!/bin/basta" e` un
commento, come e` giusto che sia.

> quindi non si potranno nemmeno chiamare script in altri 
> linguaggi (php, python etc...).

Tutto cio` che e` eseguibile puo` essere eseguito da /bin/sh.

E` semplice e lineare. Non inventiamo complicazioni che non ci sono.

saluti
/alessandro



Re: bash in at command

2022-10-05 Per discussione Piviul

On 05/10/22 15:07, Giuseppe Sacco wrote:

Il giorno mer, 05/10/2022 alle 14.36 +0200, Piviul ha scritto:

On 05/10/22 12:15, Giuseppe Sacco wrote:

[...]
Qualcosa del tipo:
$ echo "bash -c /path/completo/script" | at 06:15

in effetti così funziona però il comportamento mi sembra abbastanza
strano... da shell at legge l'interprete da utilizzare dal file stesso
mentre con l'opzione -f lo esegue con /bin/sh. Inoltre se apro una shell
sh ed eseguo uno script bash (con #!/bin/bash inserito nella prima riga)
o lancio lo stesso script con il comando con sh -c, in entrambi casi
viene utilizzato l'interprete bash.

In genere /bin/sh è un link ad una delle varie shell. Dovresti controllare
qual è e verificare che quell'interprete gestisca correttamente lo shebang.
(Nell'ipotesi che la shell si occupi dell'interpretazione dello shebang
anziché farlo fare alla chiamata «execve» del kernel.)


ecco come si chiama, shebang, non riuscivo a ricordarlo! Bene, grazie.

Comunque sia che si lanci lo script da shell at, con il comando at -f, 
direttamente da shell sh o con il comando sh -c, viene utilizzata sempre 
la stessa shell /bin/sh indipendentemente a cosa quel link simbolico 
punti quindi mi aspetto abbia sempre lo stesso comportamento invece at 
-f non legge lo shebang. Un workaround comunque me lo hai suggerito, mi 
accontento,


Probabilmente chiamare at con il parametro -f farà direttamente una 
chiamata «execve» (che non so cosa sia ma riporto quel che hai scritto 
tu) al kernel che mi sembra di aver capito non va a leggere la shebang 
dello script... quindi non si potranno nemmeno chiamare script in altri 
linguaggi (php, python etc...). Magari poi approfondisco.


Grazie!

Piviul



Re: bash in at command

2022-10-05 Per discussione Giuseppe Sacco
Il giorno mer, 05/10/2022 alle 14.36 +0200, Piviul ha scritto:
> On 05/10/22 12:15, Giuseppe Sacco wrote:
> > [...]
> > Qualcosa del tipo:
> > $ echo "bash -c /path/completo/script" | at 06:15
> 
> in effetti così funziona però il comportamento mi sembra abbastanza 
> strano... da shell at legge l'interprete da utilizzare dal file stesso 
> mentre con l'opzione -f lo esegue con /bin/sh. Inoltre se apro una shell 
> sh ed eseguo uno script bash (con #!/bin/bash inserito nella prima riga) 
> o lancio lo stesso script con il comando con sh -c, in entrambi casi 
> viene utilizzato l'interprete bash.

In genere /bin/sh è un link ad una delle varie shell. Dovresti controllare
qual è e verificare che quell'interprete gestisca correttamente lo shebang.
(Nell'ipotesi che la shell si occupi dell'interpretazione dello shebang
anziché farlo fare alla chiamata «execve» del kernel.)

Ciao,
Giuseppe




Re: bash in at command

2022-10-05 Per discussione Piviul

On 05/10/22 12:15, Giuseppe Sacco wrote:

Ciao,

Il giorno lun, 03/10/2022 alle 12.10 +0200, Piviul ha scritto:

Ciao a tutti, c'è un modo impostare l'esecuzione automatica di un bash
script usando atd? Quando lo imposto viene usato sh ma io vorrei proprio
usare bash

Qualcosa del tipo:
$ echo "bash -c /path/completo/script" | at 06:15


in effetti così funziona però il comportamento mi sembra abbastanza 
strano... da shell at legge l'interprete da utilizzare dal file stesso 
mentre con l'opzione -f lo esegue con /bin/sh. Inoltre se apro una shell 
sh ed eseguo uno script bash (con #!/bin/bash inserito nella prima riga) 
o lancio lo stesso script con il comando con sh -c, in entrambi casi 
viene utilizzato l'interprete bash.


bah...

Grazie mille

Piviul



Re: bash in at command

2022-10-05 Per discussione Giuseppe Sacco
Ciao,

Il giorno lun, 03/10/2022 alle 12.10 +0200, Piviul ha scritto:
> Ciao a tutti, c'è un modo impostare l'esecuzione automatica di un bash 
> script usando atd? Quando lo imposto viene usato sh ma io vorrei proprio 
> usare bash

Qualcosa del tipo:
$ echo "bash -c /path/completo/script" | at 06:15

Ciao,
Giuseppe