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....
Grazie
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....
Grazie
<div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-size:small;color:rgb(0,0,0)"><font face="monospace">#!/bin/bash</font><br><br><font face="tahoma, sans-serif">In testa allo script?</font></div><br><div id="gmail-mt-signature">
Hai provato mettendo:
#!/bin/bash
In testa allo script?
On 03/10/22 14:19, Gabriele Zappi wrote:
Hai provato mettendo:
#!/bin/bash
In testa allo script?
certo, c'è sempre stato!
Piviul
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
On 03/10/22 14:19, Gabriele Zappi wrote:
Hai provato mettendo:
#!/bin/bash
In testa allo script?
certo, c'è sempre stato!
Piviul
In effetti parzialmente hai ragione anche tu; dalla mia esperienza se
usi la modalita` interattiva di at
per schedulare un job funziona, viene
letto il commento iniziale #!/bin/bash ma se invece lo scheduli da
script con l'opzione -f non funziona.
Purtroppo non credo sia possibile che uno script sappia quale sia l'interprete che lo sta eseguendo
Non vorrei allora che l'installazione di bash nel tuo ambiente non
fosse completa, e quindi /bin/bash si traduca in un link simbolico a
sh ...
Proverei a fare un sudo apt -y --reinstall install bash, nel dubbio, e
poi riproverei.
$ cat /usr/local/bin/bashtest.sh
#!/bin/bash
set -o errexit
function bashtest
{
echo ok
}
bashtest
Quindi at esiste ancora? Incredibile. Niente systemd-at? Non ditelo in giro...
Quindi at esiste ancora? Incredibile. Niente systemd-at? Non ditelo in giro...
allora forse /bin/bash è un link a shls -l /bin/bash
Infatti se hai voglia di fare alcune prove ti accorgerai che se scheduli
ad esempio lo script che ho mandato[¹] da shell at (senza specificare l'opzione -f di at per intenderci) non da errori, se lo scheduli con il comando -f da errore. In entrambi i casi viene generato il warning
"commands will be executed using /bin/sh".
In effetti parzialmente hai ragione anche tu; dalla mia esperienza se"at", da specifica, esegue il suo stdin usando sh. Ovviamente
usi la modalita` interattiva di at
non puo` essere diversamente, perche` romperebbe molte cose.
E lo dice pure su stderr:
laptopo% at now
warning: commands will be executed using /bin/sh
per schedulare un job funziona, vienenon cambia. Semplicemente legge il file invece di leggere stdin.
letto il commento iniziale #!/bin/bash ma se invece lo scheduli da
script con l'opzione -f non funziona.
Infatti se hai voglia di fare alcune prove ti accorgerai che se scheduliPreferisco il caso semplice, non "errore o non errore". Faccio "ps u $$"
ad esempio lo script che ho mandato[¹] da shell at (senza specificare
l'opzione -f di at per intenderci) non da errori, se lo scheduli con il
comando -f da errore. In entrambi i casi viene generato il warning
"commands will be executed using /bin/sh".
per vedere che processo sta girando. Con "at" interattivo parte sh,
che ignora #!/bin/bash come commento:
laptopo% tty
/dev/pts/10
laptopo% at now; sleep 2
warning: commands will be executed using /bin/sh
at> #!/bin/bash
at> ps u $$ > /dev/pts/10
at> <EOT>
job 6 at Tue Oct 4 14:50:00 2022
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
rubini 14462 0.0 0.0 2420 528 ? SN 14:50 0:00 sh
Quindi gira sh. "sleep 2" l'ho messo per non avere il prompt in mezzo.
Con "-f" il risultato e` lo stesso:
laptopo% cat > /tmp/at
#!/bin/bash
ps u $$ > /dev/pts/10
Ma non parliamo troppo di questi strumenti, che poi ci si accorge che esistono e vengono rotti. Come fgrep: sara` rimosso da una prossima
versione di grep, perche` "grep -F" fa la stessa cosa. Cosi` un tot
di vecchi script si romperanno, per risparmiare un inode e 28 byte in
sistemi peni di gigabyte dimm
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....
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 bashQualcosa del tipo:
script usando atd? Quando lo imposto viene usato sh ma io vorrei proprio
usare bash....
$ echo "bash -c /path/completo/script" | at 06:15
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.
Il giorno mer, 05/10/2022 alle 14.36 +0200, Piviul ha scritto:
On 05/10/22 12:15, Giuseppe Sacco wrote: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.)
[...]in effetti così funziona però il comportamento mi sembra abbastanza
Qualcosa del tipo:
$ echo "bash -c /path/completo/script" | at 06:15
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.
strano... da shell at legge l'interprete da utilizzare dal file stesso
mentre con l'opzione -f lo esegue con /bin/sh.
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
Probabilmente chiamare at con il parametro -f [...]
[...] 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...
quindi non si potranno nemmeno chiamare script in altri
linguaggi (php, python etc...).
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 comportastrano... da shell at legge l'interprete da utilizzare dal file stesso >>>> mentre con l'opzione -f lo esegue con /bin/sh.
(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,Se faccio "sh -c" ovviamente parte sh. Se faccio "bash -c" parte bash.
direttamente da shell sh o con il comando sh -c, viene utilizzata sempre
la stessa shell /bin/sh
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.
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....
/path/to/the/script.sh
Ctrl-d
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 297 |
Nodes: | 16 (2 / 14) |
Uptime: | 09:47:20 |
Calls: | 6,666 |
Files: | 12,213 |
Messages: | 5,336,330 |