Estou no macOS Sonoma 14.6.1 e tenho três arquivos de origem JavaScript em uma pasta de origem e estou usando ln -s
para criar links simbólicos para eles em duas pastas de destino.
Para um desses arquivos, cada um dos seus dois links aponta para si mesmo e não para o arquivo de origem. Tentei vários meios de duplicar o arquivo de origem, incluindo reescrevê-lo em um editor, sem sucesso. Os links dos outros dois arquivos de origem estão corretos.
A única diferença que posso ver entre o arquivo com problema e os outros dois é que cada um dos outros dois possui um ou dois atributos estendidos e o arquivo com problema não possui nenhum. Um dos outros dois tem com.apple.metadata:kMDItemWhereFroms
e ambos têm com.apple.lastuseddate#PS
. Não sei se essa diferença em relação ao arquivo do problema é significativa.
Posso contornar esse problema duplicando o arquivo de origem nos diretórios de destino, mas é claro que a vinculação é mais desejável.
Comando:
$ ~/dev/keyboards/Custom/Ergogen
cd brec36/brec36-footprints #source directory
$ ~/dev/keyboards/Custom/Ergogen/brec36/brec36-footprints
ln -s elite-c.js ../brec36L/footprints/elite_c.js
# ls alias to show result:
$ ~/dev/keyboards/Custom/Ergogen/brec36/brec36-footprints
ll ../brec36L/footprints/elite_c.js
lrwxr-xr-x 1 brec wheel 10 Aug 21 09:52 ../brec36L/footprints/elite_c.js@ -> elite-c.js
Você usou:
ln -s
na verdade, não interpreta o parâmetro "target" como sendo relativo ao diretório atual. Em vez disso, ele apenas armazena o caminho especificado como o destino do link simbólico sem qualquer modificação (e sem sequer verificar se o destino existe) – se você especificouelite-c.js
, o textoelite-c.js
será armazenado como o destino do link, sem qualquer nota do seu diretório atual.Uma vez armazenado como destino do link, o texto agora é interpretado como relativo à localização do link, ou seja, neste exemplo ele se torna relativo a
../brec36L/footprints/
.Para evitar isso, você precisa converter preventivamente o caminho para um que seja relativo ao local do link (o Linux tem
realpath
para isso, não sei se o macOS tem algo semelhante) oucd
para o local do link para que o shell o preenchimento de tabulação ajudaria você com isso. Por exemplo:ou
O Linux (GNU Coreutils) hoje em dia tem a
-r
opção que faz com que o comando se comporte de maneira mais sensata –ln -s -r
converte o destino em um caminho relativo apropriado – mas não acho que o macOS o faça.