Sua função cria info.php , mas a exclui imediatamente.
Depois de criar o arquivo info.php , parece que você pretende que o próximo comando programe sua exclusão:
rm "$drt"/info.php | at now + 2 hours
Mas não é isso que está acontecendo. Que executa o comando rm agora, então canos sua saída padrão (para a qual nada seria escrito normalmente, pois rm é bem-sucedido silenciosamente por padrão ) para a entrada padrão do comando at .
Se você realmente precisa que essa função de shell agende a exclusão do arquivo, forneça o comando como texto na entrada padrão de at ou programe um comando que execute um script separado que exclua o arquivo. Veja em (1) para detalhes sobre como agendar comandos para executar com at .
Observe que você pode realmente ver, a partir do seu rastreamento, que isso é o que estava acontecendo:
+ at now + 2 hours
+ rm /var/www/html/info.php
Os comandos em um pipeline são executados de forma assíncrona. Esse rastreamento mostrou que o shell se comportou como deveria quando você deu dois comandos separados por | . Ele executou o comando at que apareceu no lado direito do canal para que ele pudesse receber dados do comando rm . Em seguida, ele imediatamente executou o comando rm . Quando isso aconteceu, o comando rm removeu o arquivo. Para evitar isso, você deve informar at para executar esse comando mais tarde, não executá-lo imediatamente em um pipeline.
Se você quiser usar algo parecido com o que tem, e desde que o valor de drt (que é /var/www/html em seu exemplo) não contenha espaços ou outros caracteres que serão tratados especialmente por /bin/sh (que at usa para executar o comando), então você pode usar:
at now + 2 hours <<<"rm -- $drt/info.php"
Se o valor de drt for conhecido por não iniciar com - , o argumento -- poderá ser omitido com segurança. Na sua situação, onde você parece estar no controle de $drt , isso parece uma aposta bastante segura.
Você pode achar conveniente testar seus comandos at programando-os para serem executados em um momento mais curto, como imediatamente ( at now ) ou em um minuto ( at now + 1 minute ).