Редактор считывает файл в память, затем закрывает файловую оболочку. Обычно:
open("/path/to/your/file", O_RDONLY|O_LARGEFILE|O_NOATIME) = 18
read(18, "blah blah blah"..., 4096) = 305
close(18) = 0
или какая-нибудь mmap или другой способ. (Не знаю, как именно он читает файлы, но дело в том, что он не держит файлы открытыми)
После этого он продолжает опрос, чтобы проверить, не изменился ли он. И снова открывается при записи.
Массив определяется в оболочке, интерпретирующей ваш скрипт, а не в терминальном окне вашего экрана.
Чтобы передать его в окно экрана zsh
, попробуйте:
screen -S "MYSCREEN" -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
Обратите внимание, что он будет посылать символы новой строки как символы новой строки, а не как возврат каретки. Однако, с zsh
это должно быть нормально (в командную строку будут вставлены только новые строки, а не причина принимать строку (что тоже хорошо)).
Если ваш массив содержит ^C
, "
, \e
символы или другие специальные для терминала символы или zle
или экранные
вещи
, то это не сработает. То же самое произойдет, если оболочка не готова к приему этого ввода.
Возможно, вам понадобится другой способ передачи информации в оболочку, запущенную внутри окна, например, через файл fifo, который проверяется как часть крюка precmd
.