Você provavelmente não deve combinar um script Bash em um executável, por essas razões, mas se você precisar de um executável , você pode usar SHC (tecnicamente um algoritmo de ofuscação). SHC "converte" o script em código C e o compila.
Chegamos então ao problema dos múltiplos arquivos. Como o SHC só pode receber um arquivo como entrada, você terá que combinar todos os arquivos em um. Obviamente isto não é possível, porque se fosse, você já teria feito isso, mas, você pode mover todos os outros arquivos para um local, e então fazer com que o programa principal chame esses arquivos.
Uma alternativa
Outra alternativa mais recomendável é mover todos os arquivos necessários para um diretório e, em seguida, escrever um programa separado que os chame. Por exemplo, se o seu programa exigir três arquivos, x
, y
e z.txt
, você poderá escrever outro script, n
, que chama x
e y
. Tanto x
como y
podem chamar z.txt
, porque estão no mesmo diretório.
Simplesmente marque o programa principal ( n
no exemplo) como executável e, em seguida, mova-o para qualquer local onde você precise dele. Como o local dos arquivos necessários não muda, não importa para onde você move o arquivo principal, pode sempre acessar os outros.
Isso inevitavelmente fica aquém do objetivo pretendido, mas é o mais próximo possível. Se você precisar dos "arquivos necessários" para acessar um arquivo onde quer que o programa seja movido, você pode simplesmente fazer com que o programa principal passe o nome desse arquivo como um argumento de linha de comando. Se necessário, você pode escrever o programa principal em C para que seja um arquivo binário executável, embora eu perceba que esse não era seu objetivo original, pode economizar tempo e espaço nos procedimentos de chamada.