/ 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
Sin mirar demasiado el bit inotifywait
de 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 $name
será un nombre de ruta con un nombre de archivo al final que tiene el sufijo de nombre de archivo .MIX
.
Al tocar $name.BRD
se creará un archivo con un sufijo de nombre de archivo .MIX.BRD
, mientras que creo que es posible que desee reemplazar el sufijo .MIX
original por .BRD
.
Esto hace eso:
for name in /home/imp/imp/msgs/*.MIX; do
touch "${name%.MIX}.BRD"
done
${name%.MIX}
elimina .MIX
del 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 echo
a unprintf
(ya que está generando datos variables ), y de usar $path
en 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 inotifywait
y qué es $file
y qué desea hacer, puede ser suficiente tocar un archivo basado en $file
en lugar de recorrer todos los archivos en el directorio.