Я использую командную строку Linux, и я - новичок с нею. Я создал два файла, test.sh
и test.log
. процесс является любым выводом, идущим в test.log
и я получаю его успешно вывод в test.log
. Я хочу запустить скрипт автоматически каждые 5 секунд и только для записи, если существует какое-либо изменение с .sh
файл.
test.sh
содержит:
#!/bin/bash
while [ true ] ;
do
echo "" date and Time >> test.log
date +%x_r >> test.log
lsusb >> test.log
sleep 5;
done
Мой вопрос: там какой-либо путь состоит в том, чтобы выполнить его автоматически и только добавить новое изменение в файле с новой датой? например, если кто-либо вставит USB-устройство в мою машину, то это добавит его с новой датой в существующий файл журнала он.
Это должно работать, это хранит последний вывод lsusb
в $lastoutput и добавляет, если они - то, если не равняются
#!/bin/bash
while [ true ]
do
currentoutput="$(lsusb)"
if [ "$currentoutput" != "$lastoutput" ]
then
echo "" date and Time >> test.log
date +%x_r >> test.log
lastoutput="$(lsusb)"
lsusb >> test.log
fi
sleep 5
done
Вы имеете к:
/etc/init.d
, каталог chmod +x
команда) , Если это не работает правильно, создайте символьную ссылку своего файла к /etc/rc.d/
:
ln -s /etc/init.d/test.sh /etc/rc.d/
май, который помогает :)
Вместо того, чтобы всегда регистрировать целый вывод lsusb
, Вы могли использовать diff
производить изменения только.
#!/bin/bash
logfile="test.log"
lsusbout_before=
while sleep 1; do
lsusbout_now="$(lsusb)"
diff=$(diff <(printf '%s\n' "$lsusbout_before") <(printf '%s\n' "$lsusbout_now"))
if [ $? = 1 ]; then
date | tee -a "$logfile"
printf '%s\n' "$diff" | grep '^[<>]' | tee -a "$logfile"
lsusbout_before="$lsusbout_now"
fi
done
Каждый раз, когда что-то добавляется, diff
выводы:
> ...
если что-то удалено, вывод
< ...
например, когда я присоединяю свою карту с интерфейсом USB:
Fr 12. Apr 10:55:48 CEST 2019
> Bus 002 Device 014: ID 8564:1000 Transcend Information, Inc. JetFlash
Этот сценарий использует diff
код ошибки 1
если файлы отличаются.
<(command)
дескриптор файла: генерирует файл в памяти с выводом command
как введено, подобный $(command)
.[ $? = 1 ]
проверьте код ошибки последней команды (здесь: diff
).grep '^[<>]'
должен подавить дополнительный вывод diff
как положение изменений, которое не важно для нас.