Quando você executa ls -l
no diretório (em seu vídeo), você pode ver que g++
não é um link simbólico. Aqui está como um link simbólico do meu sistema se parece:
lrwxrwxrwx 1 root root 10 May 28 20:20 modules.conf -> ../modules
Anote a string no começo: lrwxrwxrwx
- todos os links simbólicos têm isso.
Você também pode dizer que seu arquivo g++
não é um link simbólico, porque quando você o abre, em vez de ver o conteúdo do arquivo para o qual ele aponta, você vê alguns outros dados.
Se um arquivo não for legível, por exemplo, ele não tem um cabeçalho conhecido ou um número mágico file name-of-file
retornará data
e os programas poderão decidir que é um 'arquivo binário'. Digite man file
para saber mais sobre isso.
Para solucionar essa parte do seu problema, basta substituir os arquivos criando links simbólicos para substituir os arquivos quebrados, por exemplo:
Para criar um link simbólico para o arquivo gcc
chamado g++
no diretório, faça o seguinte:
ln -s gcc g++
E, em seguida, ls -l
para verificar. Você deveria ver algo como:
lrwxrwxrwx 1 zanna zanna 3 May 31 08:38 g++ -> gcc
-rwxrwxr-x 1 zanna zanna 0 May 31 08:38 gcc
Mas se o seu script envsetup será executado, então ... outra pergunta.
Como isso aconteceu?
Além do escopo da questão, na verdade, mas para investigação adicional:
Você mencionou que sua tentativa de criar o ambiente gera stray 6 and 7
. Esta é a notação octal de 5
e 4
, que é uma Marca de pedido de byte , mostrando que um arquivo usa UTF-16 codificação. A codificação UTF-16 (little endian) também é representada pelos caracteres ÿþ
que você vê no seu não-symlink. Esses bits de código serão informados como "dispersos" se ocorrerem em qualquer lugar diferente do início de um arquivo. O Windows (NTFS) e outros sistemas de arquivos usam a codificação UTF-16 LE para nomes de arquivos (e as cadeias de caracteres Unicode que armazenam sua versão de links simbólicos), então isso pode estar acontecendo porque partes dos nomes de caminho estão em tal sistema de arquivos. Novamente, corrija fazendo novos links simbólicos.
Você não pode transformar um usuário comum arquivo em um link simbólico porque em geral o symlink-ness é um metadado armazenado no sistema de arquivos, em tabelas de inode.
No entanto, como existem implementações de links simbólicos que armazenam os dados do caminho dentro do arquivo, e esse método pode ser usado como um fallback no caso de não haver inodes suficientes disponíveis para armazenar caminhos de symlink, isso pode ter acontecido porque você não tem inodes suficientes na partição (dê uma olhada com df -i .
)