Esse ^M é um retorno de carro . Windows representa quebras de linha pelo retorno de carro de seqüência de dois caracteres, alimentação de linha (CRLF ou ^M^J ). Linux e outros unices usam o caractere único LF. Este CR é tratado como um caractere comum, então o kernel procura por um interpretador chamado /bin/sh␍ em vez de /bin/sh . Quando você invocou sh explicitamente, ele também tratou o CR como um caractere comum, parte dos nomes dos comandos.
Este é um sinal de que esses arquivos foram copiados de uma máquina Windows onde eram arquivos de texto. Você não pode copiar diretamente arquivos de texto entre máquinas Windows e Linux, você precisa converter os finais de linha. É provável que você tenha extraído o arquivo no Windows e copiado os arquivos para o Linux. Em vez de fazer isso, extraia o arquivo no Linux.
No caso do Boost, a partir da versão 1.49.0 , o arquivo é distribuído em quatro formatos:
- gzip e bzip2, com finais de linha unix;
- zip e 7z, com finais de linha do Windows.
A maneira mais fácil de compilar o Boost no Linux é usar o arquivo bzip2. Se você precisa trabalhar com o 7z, pode usar comandos como dos2unix ou sed -i -e 's/\r$//' em todos os arquivos de texto para converter os finais de linha.