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 -s
komendy 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ć foo
w 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_link
do 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_link
po prostu zawiera link foo
do 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.