спать внутри inotifywait в функции оболочки не работает - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь запустить следующую функцию

foo () {
    sleep 1
    echo "outside inotify"
    (inotifywait . -e create |
    while read path action file; do
        echo "test"
        sleep 1
    done)
    echo "end"
}

Пока inotifywait не будет работать правильно; Я вижу:

>> foo
outside inotify
Setting up watches.
Watches established.

Однако, как только я создаю файл, я получаю

>>> fooo
outside inotify
Setting up watches.
Watches established.
test
foo:6: command not found: sleep
end

Есть идеи почему? Плюс мне нужно порождать подпроцесс () вокруг inotifywait? Каковы преимущества?

спасибо.

Редактировать Я понял, что я работаю на zsh

1 Ответ

3 голосов
/ 11 апреля 2020

read path вводит вас в заблуждение, потому что в отличие от POSIX-совместимых оболочек - которые гарантируют, что только изменение переменных с именами в верхнем регистре может иметь нежелательные побочные эффекты для самой оболочки - zsh также имеет специальные Поведенческое поведение для нескольких строчных имен, включая path.

В частности, zsh представляет path как массив, соответствующий значениям в PATH. Присвоение строки этому массиву также перезапишет ваш PATH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...