Najprostszym sposobem na połączenie z bieżącym katalogiem jako ścieżką bezwzględną, bez wpisywania całego ciągu ścieżki byłoby
ln -s "$(pwd)/foo" ~/bin/foo_link
target(Pierwszy) argumentem dla ln -skomendy działa w stosunku do lokalizacji dowiązania symbolicznego, a nie aktualnym katalogu. Pomaga wiedzieć, że zasadniczo utworzone dowiązanie symboliczne (drugi argument) po prostu przechowuje tekst podany dla pierwszego argumentu.
Dlatego jeśli wykonasz następujące czynności:
cd some_directory
ln -s foo foo_link
a następnie przenieś ten link
mv foo_link ../some_other_directory
ls -l ../some_other_directory
zobaczysz, że foo_link próbuje wskazać foow katalogu, w którym się znajduje. Działa to również z dowiązaniami symbolicznymi wskazującymi ścieżki względne. Jeśli wykonasz następujące czynności:
ln -s ../foo yet_another_link
a następnie przejdź yet_another_linkdo innego katalogu i sprawdź, gdzie wskazuje, zobaczysz, że zawsze wskazuje ../foo. Jest to zamierzone zachowanie, ponieważ wiele razy dowiązania symboliczne mogą być częścią struktury katalogów, która może znajdować się w różnych ścieżkach bezwzględnych.
W twoim przypadku, kiedy tworzysz link, wpisując
ln -s foo ~/bin/foo_link
foo_linkpo prostu zawiera link foodo jego lokalizacji. Umieszczenie $(pwd)przed nazwą argumentu docelowego po prostu dodaje ścieżkę bezwzględną bieżącego katalogu roboczego, dzięki czemu łącze jest tworzone z bezwzględnym celem.