Мне нужно написать скрипт, который записывает в файл, сколько раз этот скрипт был выполнен.
Как я могу это сделать?
command-line
bash
scripts
Милен Григоров
источник
источник
echo $(( $(cat countfile 2>/dev/null || echo 0) + 1 )) > countfile
$(…)
исполняется раньше всего (особенно перед>
). Но я часто использую$(cat countfile 2>/dev/null || echo 0)
часть, чтобы получить разумное значение по умолчанию в случае, если файл не существует. Мы могли бы добавитьsponge
:-), чтобы быть в безопасности.flock
команду, чтобы предотвратить состояние гонки. См. Unix.stackexchange.com/a/409276Просто дайте сценарию создать файл журнала, добавьте, например, строку в свой сценарий в конце:
Таким образом, вы можете отформатировать способ представления даты и времени самостоятельно, но если вы просто хотите использовать полную дату и время (и
HH:MM:SS
это приемлемый формат для вас), вы также можете просто использовать:Тогда вы могли бы сделать:
Который подсчитывает символы новой строки и дает вам оценку количества строк в файле журнала. До этого вы можете видеть в файле журнала, даже когда он был выполнен. Чтобы адаптировать его к вашим потребностям, вы можете изменить пути и имена, используемые для регистрации. Я только что сделал пример, который сохраняет файл журнала в
~
.Так, например, вы хотите, чтобы скрипт добавил это количество к строке, которую вы добавили в конце вашего скрипта, вы можете сделать что-то вроде этого в начале вашего скрипта:
И измените свою строку в конце скрипта на что-то, включая даже эту информацию:
источник
Это решение использует тот же подход, что и ответ Byte Commander, но оно не опирается на арифметику оболочки или другие Bashisms.
Перенаправления потока
/dev/null
(для подавления сообщения об ошибке при последующем перенаправлении вводаread
команды, если файл счетчика ожидаемо отсутствует),источник
Другой подход
Отдельный файл счетчика имеет недостатки:
Таким образом, этот ответ устраняет отдельный файл счетчика и помещает счет в сам скрипт bash!
flock
гарантирует, что на короткое время два пользователя не смогут запустить скрипт одновременно.Код
Другой подход с использованием файла журнала
Подобно ответу Видеонавта, я написал здесь ответ из файла журнала: Bash-скрипт для ведения контрольного журнала / журнала файлов, к которым обращаются для регистрации каждый раз, когда полномочия root используются с
gedit
илиnautilus
.Уловка, однако, заключается в том, что вместо использования
gksu
сценария именуетсяgsu
и вызываетpkexec
«современный» способ использования sudo в графическом интерфейсе, поэтому мне сказали.Еще одним преимуществом является то, что он не только говорит, что каждый раз с полномочиями root были использованы,
gedit
но он записывает имя файла, который был отредактирован. Вот код~/bin/gsu
:/usr/local/bin/log-file
:Содержимое файла журнала
gsu-log-file-for-gedit
после нескольких правок:источник