1) A maneira correta de acessar muitos scripts é apenas adicionar o diretório no qual os scripts estão em $PATH
. Por exemplo, eu tenho meus scripts pessoais em ~/bin
, então no meu .profile
, eu tenho uma linha
export PATH=$HOME/bin:$PATH
Isso coloca meu ~/bin
na frente dos caminhos existentes, então eu posso "sobrescrever" outros programas por ter scripts com o mesmo nome. Se você não quiser, coloque novos diretórios após $PATH
.
Portanto, basta adicionar o diretório em que você mantém seus scripts em seu caminho e seu problema está resolvido - completamente sem links simbólicos.
2) Background: Em um determinado sistema de arquivos, os arquivos são identificados usando seu inode number . Um diretório apenas mapeia nomes de arquivos para números de inodes. Se você usar ln
sem -s
(hardlinks), estará criando uma nova entrada de diretório com o inode de um arquivo existente. Então, obviamente, isso só funciona para arquivos no mesmo sistema de arquivos.
OTOH, se você usa ln -s
, você está criando um link simbólico (symlink): Um arquivo especial que tem como conteúdo o caminho especificado, e este caminho é usado no lugar do arquivo quando você tenta acessá-lo. Você não precisa ser root para criar links simbólicos.
3) Quando você executa ln ~/test.sh /usr/local/bin
, os comandos ln
detectam que /usr/local/bin
é um diretório, portanto, ele pressupõe que você realmente queira executar ln ~/test.sh /usr/local/bin/test.sh
. O mesmo acontece com -s
. É importante ter isso em mente, porque você também pode criar links simbólicos para diretórios. Mas somente o root pode criar hardlinks para diretórios, porque você poderia criar uma estrutura circular de diretórios dessa maneira (e o root deveria saber o suficiente para não fazer isso).
4) Enquanto um link físico tem bits de modo de arquivo, um link simbólico não: Qualquer tentativa de chmod
um link simbólico apenas mudará os bits de modo de arquivo no arquivo para o qual aponta.
5) Eu não sei o que aconteceu quando você não pôde executar test.sh
, a mensagem de erro Too many levels of symbolic links
indica que você tem outros links simbólicos em algum lugar, então algo ficou bagunçado. Eu preciso ver sua estrutura de diretórios para descobrir o que aconteceu.
6) Se você quiser realmente ligar simbolicamente todos os scripts no seu diretório de script para /usr/local/bin/
ao invés de apenas definir o PATH
(eu não recomendo isso), considere usar stow
: Este programa define muitos links simbólicos de uma só vez. man stow
para detalhes.