uname -r
можно использовать для определения точной версии ядра вашей ОС Linux. или вы можете использовать uname -a
для получения всей информации о версии ядра.
Ваша обновленная функция с исправленными кавычками при вызовеstat
(кавычки выводились бы, и последующие проверки содержимого файла всегда не удавались из-за них):
changed() {
echo "$1"
if [ -f "$1_changed" ]; then
if [ "$(stat -f "%Z")" != "$(<"$1_changed")" ]; then # escaped quotes removed
return 1
else
return 0
fi
else
"$(stat -f "%Z" "$1")" > "$1_changed" # note: error here
return 1
fi
}
Это может быть значительно сокращено до:
changed () {
echo "$1"
if [ ! -f "$1_changed" ]; then
stat -f %Z "$1" >"$1_changed"
return 1
fi
[ "$(stat -f %Z)" != "$(<"$1_changed")" ]
}
Здесь я также превратил подстановку команды, которая запускала бы вывод из stat
в прямой вызов stat
, перенаправленный в выходной файл (, см. error here
примечание в первой части кода ).
Я также изменил логику функции, чтобы не требовалось так много return
вызовов. Если return
отсутствует, статус выхода функции будет таким же, как у последнего оператора в функции.
Мы можем сделать это немного аккуратнее с помощью
changed () {
echo "$1"
local timestamp="$(stat -f %Z "$1")"
if [ ! -f "$1_changed" ]; then
printf '%s\n' "$timestamp" >"$1_changed"
return 1
fi
[ "$timestamp" != "$(<"$1_changed")" ]
}
Позже вы можете вызвать эту функцию, используя
if changed "$filename"; then
# do something, the file in "$filename" changed
fi
Обратите внимание, что ваш звонок,
if [ changed("plugins") -eq 1]; then
содержит несколько синтаксических ошибок.
Исключите четыре ошибки в
if [ stat -f "%Z" != $(<"$_changed") ]; then
которые являются:
$(...)
stat -f
на -c
вариант $1
)дляstat
(позже!)$1
уступка
if [ $(stat -c "%Z" "$1") != $(<"$1_changed") ]; then