linux bash - posso criar um atalho (semelhante ao windows) em vez de um link simbólico?

0

então digamos que eu comece aqui:

/home/user1/$

Eu quero fazer um atalho para /tmp/subdir1/subdir2/here

Normalmente eu faria um link sym:

/home/user1/$ ln -s /tmp/subdir1/subdir2/here here

Então eu posso fazer:

/home/user1/$ cd here
/home/user1/here$

Mas, neste caso, quero que o resultado seja:

/home/user1/$ cd here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

e não:

/home/user1/$ cd here
/home/user1/here$            <--- path is via sym link

Isso é possível?

    
por code_fodder 21.02.2018 / 12:34

2 respostas

1

Use set -P :

/home/user1/$ set -P
/home/user1/$ cd here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

(desfazer com set +P ).

Ou force esse comportamento ao invocar cd :

/home/user1/$ cd -P here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

Ou corrija seu diretório de trabalho depois que você cd normalmente:

/home/user1/$ cd here
/home/user1/here$ cd 'pwd -P'
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

Ou modifique o seu cd , assim, quando é dado um arquivo , ele lê o destino dele e age como você deseja :

cd(){ if [ -f "$1" ]; then command cd "'cat "$1"'"; else command cd "$@"; fi }

Agora:

/home/user1/$ echo "/tmp/subdir1/subdir2/here" > there
/home/user1/$ cd there
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

Esta é uma prova de conceito. Ajuste-o às suas necessidades. Alguma lógica para rejeitar arquivos binários ou grandes (dados por engano) pode ser o primeiro ajuste sensato.

    
por 21.02.2018 / 14:56
0

Se você quer apenas um atalho para o comando "cd", você pode criar um alias:

alias cd_here='cd /tmp/subdir1/subdir2/here'

Você também pode fazer um mount -o bind /dir/source /dir/dest

Mas o que você verá no prompt será sempre (ln, modo de montagem) o / dir / dest. Em outras palavras, o diretório de origem será montado no destino, portanto, ficará transparente (é a meta no linux) para o usuário final que o diretório de destino hospedará o conteúdo do diretório de origem.

    
por 21.02.2018 / 14:04