From c713c96e60a555f4a50721a0b2b4a3041ef55d1e Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 19 Dec 2020 13:55:47 +0300 Subject: [PATCH] =?utf8?q?=D0=A1=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=B8=D1=87?= =?utf8?q?=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA?= =?utf8?q?=D0=B8=20=D0=B8=20CWD/PWD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 и реализации). Чёрт с ним. -- 2.48.1