Link simbólico para a pasta atual como caminho absoluto sem digitar o caminho inteiro

10

Links simbólicos são atalhos salvos para caminhos relativos:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

O arquivo ~/bar/fooé um link simbólico para baro diretório atual, ou seja, ele próprio

E se eu quiser criar um link simbólico em outro diretório para o diretório em que estou no momento? Portanto, no exemplo acima, eu estou ~/fooe quero criar ~/bar/foocomo um link simbólico para ~/foo. É claro que meu diretório atual pode ter um pouco mais de 5 caracteres e pode não ser tão fácil de digitar.

Gareth
fonte

Respostas:

13

Eu diria tipo

ln -s $PWD ~/bar/

ou

ln -s `pwd` ~/bar/

Você também pode usar

ln -s $PWD ~/bar/

mas acho que você sabia disso e não é isso que você está cuidando. Então, por favor, atualize sua pergunta para explicar qual é seu objetivo?

Se o caminho contiver espaços, seria aconselhável usar:

ln -s "$PWD" ~/bar/
Huygens
fonte
2
Coloque aspas duplas em suas $variáveis ​​e substituições de comandos; caso contrário, os nomes de arquivos com espaços atrapalharão a execução. Você também não precisa do final $(basename $PWD)(e esqueceu um $(e citação :-))), já que esse é o nome do link padrão.
Daniel Andersson
Eu acho que estava sendo idiota. Eu pensei que tentei a pwdabordagem e algo deu errado. Vamos colocar isso para baixo a um erro ID-ten-T
Gareth
@DanielAndersson, você está certo que ele não suporta espaços no caminho. Bom ponto. assim para o registro eu vou atualizar a resposta :)
Huygens
4

Absolutamente:

ln -s "$(readlink -f .)" ~/bar

(pode ser bom para generalidade em scripts) ou apenas

ln -s ~/foo ~/bar

Relativamente:

ln -s ../foo ~/bar

A conclusão da guia ajudará você a digitar.


Do comentário do grawity e http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Alterações dignas de nota no release 8.16 (26-03-2012) [estável]

...

lnagora aceita a --relativeopção, para gerar um link simbólico relativo a um destino, independentemente de como o destino for especificado.

Então, com esta versão:

ln -s --relative . ~/bar

deve funcionar (com, na prática, é idêntico ao seu primeiro exemplo, com a adição da --relativeopção).

Daniel Andersson
fonte
4
Os coreutils mais recentes podem criar automaticamente links simbólicos relativos usando ln -s -r foo ~/bar.
User1686 15/05
@ grrawity: Interessante. Ainda não está no meu sistema, aparentemente (Debian Sid).
Daniel Andersson
Parece ter sido adicionado à v8.16 em 22 de março, de acordo com o git.
User1686 15/05
1
Além disso, qual é a vantagem de $(readlink -f .)mais $PWD?
User1686 15/05
2
@ grrawity: Não muito. Eles funcionam de maneira diferente se o diretório de trabalho atual tiver sido alcançado por um link. readlink -fo link simbólico será direcionado para o caminho de destino absoluto do diretório atual, enquanto $PWDo link simbólico para o diretório literal no qual o usuário está atualmente. O que se quer é provavelmente diferente de tempos em tempos e, em primeiro lugar, provavelmente não é um problema.
Daniel Andersson