A maneira mais fácil de vincular ao diretório atual como um caminho absoluto, sem digitar toda a cadeia de caminho, seria
ln -s "$(pwd)/foo" ~/bin/foo_link
O target
(primeiro) argumento para o ln -s
comando funciona em relação à localização do link simbólico, não ao diretório atual. Ajuda saber que, essencialmente, o link simbólico criado (o segundo argumento) simplesmente retém o texto que você fornece para o primeiro argumento.
Portanto, se você fizer o seguinte:
cd some_directory
ln -s foo foo_link
e depois mova esse link
mv foo_link ../some_other_directory
ls -l ../some_other_directory
você verá que foo_link
tenta apontar para foo
o diretório em que reside. Isso também funciona com links simbólicos que apontam para caminhos relativos. Se você fizer o seguinte:
ln -s ../foo yet_another_link
e depois vá yet_another_link
para outro diretório e verifique para onde ele aponta, você verá que ele sempre aponta para ../foo
. Esse é o comportamento pretendido, pois muitas vezes os links simbólicos podem fazer parte de uma estrutura de diretórios que pode residir em vários caminhos absolutos.
No seu caso, quando você cria o link, digitando
ln -s foo ~/bin/foo_link
foo_link
apenas mantém um link para foo
, relativo à sua localização. Colocar $(pwd)
na frente do nome do argumento de destino simplesmente adiciona o caminho absoluto do diretório de trabalho atual, para que o link seja criado com um destino absoluto.
source_file
(primeiro) argumento é onde o link aponta, que é literalmente o que você digita no comando. Otarget_file
(segundo) argumento se torna o nome do link, a menos que você insira um diretório; nesse caso, o nome do link é o mesmo que o nome da base,source_file
mas colocado no diretóriotarget_file
.ln
página de manual,target
é o primeiro argumento (onde o link aponta para ), enquanto o segundo argumento é simplesmente referido como olink
(source
não é mencionado).target
e o segundolink
( man7.org/linux/man-pages/man1/ln.1.html ). Mas no BSD (incluindo OS X) o primeiro é chamadosource
e o segundotarget
( freebsd.org/cgi/man.cgi?ln ). Bastante confuso.Usar o sinalizador
-r
(--relative
) fará este trabalho:fonte
-r
é um GNUism, ou seja, não POSIX, portanto não funcionará no caso OP, pois oln
comando padrão do OS X é baseado em BSD.Para salvar algumas digitações, você pode fazer
fonte
*
,?
e[...]
).bash
, por isso é geralmente uma boa ideia citá-la. Meu mal, eu deveria ter sido mais específico.E se:
fonte