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
).