1

我正在尝试运行以下功能

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 上运行

4

1 回答 1

3

这把read path你弄乱了,因为与 POSIX 兼容的 shell 不同——它保证只有修改具有全大写名称的变量才会对 shell 本身产生不必要的副作用——zsh 还具有几个小写名称的特殊行为, 包括path.

特别是, zsh 呈现path为一个数组,对应于PATH. 为这个数组分配一个字符串也会覆盖你PATH的。

于 2020-04-10T23:35:50.077 回答