Удаляемые файлы .BRD и .MIX. Создавая их

/ dev / null - это файл устройства, который действует как черная дыра. Все, что на нем написано, отбрасывается или исчезает. Когда вы запускаете скрипт, который дает вам результат, и если мы добавляем > / dev / null 2> & 1 в конце скрипта, мы просим скрипт записать все, что сгенерировано из скрипта (как вывод, так и сообщения об ошибках) в / dev / null .

Чтобы разбить его:

  • 2 - дескриптор стандартной ошибки или STDERR
  • 1 - дескриптор стандартного вывода или STDOUT

2> & 1 просит направить все STDERR как STDOUT (т.е. обрабатывать все сообщения об ошибках, сгенерированные из сценария, как его стандартный вывод). Теперь у нас уже есть > / dev / null в конце скрипта, что означает, что весь стандартный вывод ( STDOUT ) будет записан в / dev / null .Поскольку STDERR теперь переходит в STDOUT (из-за 2> & 1 ), оба STDERR и STDOUT заканчиваются в черной дыре / dev / null . Другими словами, сценарий заглушен.

Между прочим, вам необходимо иметь > перед / dev / null 2> & 1 . Это должно быть:

x * * * * /path/to/my/script > /dev/null 2>&1
1
17.02.2018, 00:38
1 ответ

Sin mirar demasiado el bit inotifywaitde su código, parece que la parte interna del ciclo toca un archivo basado en lo que hay en la variable name:

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

El valor de $nameserá un nombre de ruta con un nombre de archivo al final que tiene el sufijo de nombre de archivo .MIX.

Al tocar $name.BRDse creará un archivo con un sufijo de nombre de archivo .MIX.BRD, mientras que creo que es posible que desee reemplazar el sufijo .MIXoriginal por .BRD.

Esto hace eso:

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

${name%.MIX}elimina .MIXdel final del valor de $name.

El código probablemente también carece de un |al final del comando inotifywait, para poder enviar su salida al bucle 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

Aquí, también me he tomado la libertad de cambiar el echoa unprintf(ya que está generando datos variables ), y de usar $pathen el bucle interno for, que espero sea correcto. El código no usa ninguna característica especial bash, así que también cambié el shell a /bin/sh.

Dependiendo de cómo funcione inotifywaity qué es $filey qué desea hacer, puede ser suficiente tocar un archivo basado en $fileen lugar de recorrer todos los archivos en el directorio.

0
28.01.2020, 00:39

Теги

Похожие вопросы