Функция, чтобы проверить, был ли файл изменен

поэтому я пытаюсь создать функцию, которая будет проверять, был ли файл изменен с помощью этой функции:

находится в functions.zsh :

 changed() { echo "$1" if [ -f "$1_changed" ]; then if [ stat -f "%Z" != $( "$1_changed" return 1 fi } 

Текущий вариант использования:

находится в load_plugins.sh :

 if [ changed("plugins") -eq 1]; then echo "plugin file updated, installing plugins" antibody bundle  "$installed_plugins" if [[ $OSTYPE == *darwin* ]];then antibody bundle robbyrussell/oh-my-zsh folder: lib/clipboard >> "$installed_plugins" fi fi 

оба из которых получены следующим образом:

находится в ~/.zshrc

 base_path="$HOME/.zsh" config_path="$base_path/config" source "$custom_path/functions.zsh" source "$config_path/load_plugins.zsh" "$config_path" 

проблема в том, что я получаю эту ошибку:

 load_plugins.zsh:7: number expected 

что это за строка:

 if [ changed("plugins") -eq 1]; then 

Я также заметил, что если я размещу:

 echo changed("plugins") 

до:

 if [ changed("plugins") -eq 1]; then 

Ничего не выводится на терминал, то же самое для echo пределах changed() который я поместил, чтобы проверить, работает ли функция.

Что я делаю неправильно?

РЕДАКТИРОВАТЬ:

Изменения, которые я сделал до сих пор:

 changed() { echo "$1" if [ -f "$1_changed" ]; then if [ "$(stat -f \"%Z\")" != "$( "$1_changed" return 1 fi } 

Законченная рабочая версия

 changed () { local timestamp="$(stat -f %Z "$1")" if [ ! -f "$1_changed" ] || [ "$timestamp" != "$(<"$1_changed")" ]; then current="$("$1_changed" fi [ "$timestamp" != "${current:-$(<"$1_changed")}" ] } 

2 Solutions collect form web for “Функция, чтобы проверить, был ли файл изменен”

Ваша обновленная функция с исправленными кавычками в обращении к 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 в первом fragmentе кода).

Я также изменил логику функции, чтобы не нужно было так много 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 
  • ssh / mosh для удаленной интерактивной оболочки и выполнить определенную функцию
  • Почему GNOME Display Manager всегда читает .profile?
  • Как получить экран для запуска / загрузки .zprofile при запуске нового окна?
  • привязать последовательность клавиш к Escape, zsh
  • Как использовать замещение параметров в шаблоне glob (zsh)
  • Есть ли способ добавить каталог в мой PATH в zsh, только если он еще не присутствует?
  • Как включить команду «daw» vi в zsh?
  • Как расширить подстроку команды?
  • Трубопроводы, рабочие места и процессы в Zsh
  • Поиск по поиску рыбы в ZSH
  • Показать путь из корня проекта в ZSH Prompt
  • Interesting Posts

    Драйверы Ubuntu на операционной системе Chromium?

    Регулярное выражение, как получить значение в сценарии оболочки?

    Невозможно изменить разрешения на сервере назначения при выполнении sFTP

    Что такое Windows-эквивалент события «Очистить журнал аудита» в Unix / Linux?

    Как два файла в одной из моих папок имеют одинаковое имя?

    Как искать доступное программное обеспечение в репозиториях, хотя CLI?

    Как установить FileZilla на CentOS?

    Как обнаружить ошибку с помощью замены процесса

    Могу ли я определить, что изменилось в обновленном пакете с помощью apt или dpkg на Debian 6?

    Шлюз Linux: как маршрутизировать NAT-соединения с использованием LAN через туннель OpenVPN?

    Как напечатать строки, содержащие 3 слова

    Моя вкладка alt + только показала только оконные окна – что я нажал?

    Переименовать определенный уровень подпапок

    Управление питанием Nouveau с графикой Nvidia Tesla

    Решения для виртуализации в OpenBSD

    Linux и Unix - лучшая ОС в мире.