Wygląda na to, że powinno być proste dowiązanie jednego pliku do nowego pliku w podkatalogu .... .... bez przenoszenia podkatalogów. Ale coś w składni jest kłopotliwe i sprzeczne z tym, czego bym się spodziewał. Oto przypadek testowy:
mkdir temp
cd temp
mkdir deploy
echo "Contents of the build file!" > deploy/resources.build.php
ln -s deploy/resources.build.php deploy/resources.php
cat deploy/resources.php #bad symlink
To po prostu tworzy uszkodzony link symboliczny! Korzystam z tego w skrypcie instalacyjnym środowiska kompilacji, więc chcę w miarę możliwości unikać zmieniania bieżącego katalogu roboczego.
ln -s deploy/resources.build.php resources.php
cat deploy/resources.php
Nie działa również, ponieważ tworzy dowiązanie symboliczne w katalogu temp zamiast podkatalogu wdrażania.
cd deploy
ln -s resources.build.php resources.php
cd ..
To działa, ale wolałbym wiedzieć, jak to zrobić bez zmiany katalogów.
Korzystanie z pełnej ścieżki, takiej jak:
/home/whatever/src/project/temp/stuff/temp/deploy/resources.build.php
Działa, ale jest niewygodny i nieco niepraktyczny, szczególnie w środowisku kompilacji, w którym wszystkie elementy projektu mogą się różnić między kompilacjami i tym podobne.
Jak mogę utworzyć dowiązanie symboliczne między dwoma plikami w podkatalogu, bez przechodzenia do tego podkatalogu i poza nim, a jednocześnie nadając nowemu plikowi „alias” nową nazwę?
Zdezorientowało mnie to, dopóki nie zrozumiałem, że dowiązanie symboliczne jest w zasadzie plikiem konfiguracyjnym. tzn. jak zapisać te dane ścieżki do prostego pliku tekstowego:
staje się:
Błąd, że ja (i prawdopodobnie OP) robił to w myśleniu ln musi wiedzieć o pliku jest ona kierowana. ln nie obchodzi. Po prostu zapisuje informacje o ścieżce do pliku. Jest to całkowicie rozsądne polecenie ln :
W związku z tym:
tworzy plik simlink wywoływany
resources.php
w./deploy
folderze, który odwołuje się do plikuresources.build.php
w folderze./deploy/deploy/
.Jest to mało prawdopodobne, co chcesz i daje zły (uszkodzony) link. Z linkiem nie ma nic złego, jeśli umieścisz tam ten plik, wówczas link będzie działał. Jednak (jak zauważyli inni) chciałem ja i OP:
źródło