.BRD e arquivos .MIX que são excluídos. Criando eles

1

Estou executando um BBS. Um software que eu portei do DOS para o Linux. BBS de impulso. Estou tendo problemas com os arquivos da base de mensagens. O problema é que, por algum motivo, ele exclui os arquivos .BRD e isso interrompe o sistema. E trava o BBS. Eu preciso descobrir uma maneira de criar esses arquivos .BRD quando faltam. Aqui está um script que eu escrevi:

#!/bin/bash

inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create 
while read path action file; do
    echo "The file '$file' appeared in directory '$path' via '$action'"
    for name in /home/imp/imp/msgs/*.MIX; do
            touch "${name}.BRD"
    done
done

Não parece estar funcionando, no entanto. Na verdade, ele não touch o .BRD arquivo (s). Esses arquivos .BRD podem ter tamanho de 0 byte. Estou usando inotifywait porque parece ser a melhor maneira de resolver essa situação. Eu tenho outros scripts que utilitze inotifywait , e eles se adaptam perfeitamente às minhas necessidades.

    
por ignatius 15.02.2018 / 21:05

1 resposta

0

Sem procurar muito no inotifywait bit do seu código, parece que a parte interna do loop toca um arquivo com base no que está na variável name :

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name}.BRD"
done

O valor de $name será um nome de caminho com um nome de arquivo no final que tenha o sufixo .MIX do nome do arquivo.

Tocar em $name.BRD criará um arquivo com um sufixo .MIX.BRD de nome de arquivo, enquanto acredito que você pode querer que o sufixo .MIX original seja substituído por .BRD .

Isso faz isso:

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name%.MIX}.BRD"
done

${name%.MIX} remove .MIX do final do valor de $name .

O código provavelmente também não possui um | no final do comando inotifywait , para poder alimentar sua saída no loop while read :

#!/bin/sh

inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create |
while read path action file; do
    printf 'The file "%s" appeared in directory "%s" via "%s"\n' "$file" "$path" "$action"

    for name in "$path"/*.MIX; do
            touch "${name%.MIX}.BRD"
    done
done

Aqui, também tomei a liberdade de alterar o echo para um printf (como é a saída de dados variáveis) e de usar $path no loop for interno, que espero esteja correto . O código não usa nenhum recurso bash especial, então eu mudei o shell para /bin/sh também.

Dependendo de como o inotifywait funciona e o que é $file e o que você deseja fazer, pode ser suficiente tocar em um arquivo baseado em $file , em vez de percorrer todos os arquivos no diretório.

    
por 17.02.2018 / 09:16