[О блоге]
[наверх]
[пред]
[2020-12-19 13:55:47+03:00]
[c713c96e60a555f4a50721a0b2b4a3041ef55d1e]
Темы: [redo][tip]
Символические ссылки и CWD/PWD
https://unix.stackexchange.com/questions/79571/symbolic-link-recursion-what-makes-it-reset/79621#79621
http://harmful.cat-v.org/software/symlinks
Для goredo мне отправили патч
http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff;h=79b9219363d2f69f8fd209ec5ee3794759fa7396
чтобы использовать os.Getwd() вместо системного вызова getwd(), ибо,
когда рабочая директория находится в иерархии с символическими ссылками,
то, из-за того что getwd() возвращает физический путь, вычисление
относительного пути до целей начинает содержать массу ../../ всяких.
Насколько понял, когда есть символические ссылки, то всё может
происходить недетерминированно, ибо появляется не чёткая иерархия в
файловой системе, а граф, где есть не один путь "следования". Ссылка на
stackexchange содержит описание работы getwd() и того, что внутри
shell-а запросто есть и своё понимание "логического" пути, с которым и
идёт работа для удобства пользователя. Вне shell всё может быть совсем
по другому.
Опять же, насколько понял, для redo действительно лучше просто
использовать os.Getwd() и дальше уж "как повезёт". Среди тестов взятых
из apenwarr, ровно в одном ровно одну проверку я закомментировал,
связанную с хождением по иерархии где есть символические ссылки. Немного
повозился с этим тестом снова, но... в интерактивном режиме zsh
redo-ifchange ведёт себя одним образом, не в интерактивном уже другим.
/bin/sh работа тоже как-то отличалась. В общем, тест явно делает
ожидания от поведения именно shell-а, а не реализации redo (ну или
совокупности какого-то поведения shell и реализации). Чёрт с ним.
[оставить комментарий]