Skrivet av WarWolf.667:
touch ~/testfil | at 08:00
Typo; behöver ha exempelvis:
echo 'touch ~/testfil' | at 08:00
Annars körs `touch` direkt, och `at` gör ingenting.
Jag tror också felet ligger i skriptet eller omgivningen, och inte `at`, som är den korrekta lösningen.
Om vi har ett skript `test.sh` med innehåll:
#!/bin/bash
echo $SHELL $0 > testoutput
och kör
så kommer `testoutput` likväl innehålla:
Skriptet körs alltså som om man kallat det med `sh` som explicit tolk, typ `sh ./test.sh`. Detta kan vara oväntat måhända, men tanken med `-f` är att man ska ange en fil som i sig innehåller batchkommandon, rad per rad, som `at` ska köra som exekverbara filer: filen man anger med `-f` är inte själva skriptet man vill köra.
En alternativ syntax som i stället faktiskt lägger till själva skriptet som det `at` kör är den som visades ovan, så exempelvis:
echo ./test.sh | at 09:00
ger `testoutput`:
Så, när du anger en fil med `-f` så är det tänkt att vara en lista med skript du vill utföra vid den angivna tidpunkten. Om du exempelvis skapar en fil `testbatch` med innehåll:
och laddar den med
så kommer du få samma output som i sista fallet:
Återigen (för tredje gången tror jag, men det är en vanlig fint, så jag pressar på lite extra ): `-f` ska ange en "jobbfil", dvs en fil som listar de skript man vill köra, och den tolkas med `/bin/sh` oavsett vad. `-f` ska inte ange själva skriptet man vill köra. Ifall skriptet är just ett POSIX-standard shell script så går det i praktiken lika bra ändå, men man behöver veta skillnaden för att hantera andra fall.