Le moyen le plus simple de créer un lien vers le répertoire en cours en tant que chemin absolu, sans taper la chaîne de chemin entière, serait
ln -s "$(pwd)/foo" ~/bin/foo_link
Le target
(premier) argument de la ln -s
commande fonctionne par rapport à l'emplacement du lien symbolique, et non à votre répertoire actuel. Il est utile de savoir que, essentiellement, le lien symbolique créé (le deuxième argument) contient simplement le texte que vous fournissez pour le premier argument.
Par conséquent, si vous procédez comme suit:
cd some_directory
ln -s foo foo_link
puis déplacer ce lien
mv foo_link ../some_other_directory
ls -l ../some_other_directory
vous verrez que foo_link
tente de pointer vers foo
le répertoire dans lequel il réside. Cela fonctionne également avec les liens symboliques pointant vers des chemins relatifs. Si vous procédez comme suit:
ln -s ../foo yet_another_link
puis déplacez-vous yet_another_link
vers un autre répertoire et vérifiez où il pointe, vous verrez qu'il pointe toujours vers ../foo
. Il s'agit du comportement souhaité, car de nombreux liens symboliques peuvent faire partie d'une structure de répertoires pouvant résider dans différents chemins absolus.
Dans votre cas, lorsque vous créez le lien en tapant
ln -s foo ~/bin/foo_link
foo_link
détient juste un lien vers foo
, par rapport à son emplacement. Le fait de placer $(pwd)
devant le nom de l'argument cible ajoute simplement le chemin absolu du répertoire de travail actuel, de sorte que le lien est créé avec une cible absolue.
source_file
(premier) argument est l'endroit où le lien pointe, ce qui correspond à ce que vous entrez dans la commande. Letarget_file
(deuxième) argument devient le nom du lien, sauf si vous entrez un répertoire, auquel cas le nom du lien est le même que le nom de base dusource_file
mais placé dans le répertoiretarget_file
.ln
page de manuel,target
est le premier argument (où les points de liaison à ) alors que est simplement appelé le second argumentlink
(source
non mentionné).target
et le secondlink
( man7.org/linux/man-pages/man1/ln.1.html ). Mais dans BSD (y compris OS X), le premier est appelésource
et le secondtarget
( freebsd.org/cgi/man.cgi?ln ). Assez déroutant.L'utilisation du drapeau
-r
(--relative
) rendra ce travail:la source
-r
un GNUisme, c'est-à-dire non POSIX donc ne fonctionnera pas dans le cas OP car laln
commande OS X standard est basée sur BSD.Pour économiser de la frappe, vous pouvez faire
la source
*
,?
et[...]
).bash
, c'est donc généralement une bonne idée de la citer. Mon mauvais, j'aurais dû être plus précis.Que diriez-vous:
la source