Acho que a raiz do seu problema é que você não entende realmente a distinção entre um emulador de terminal e um shell e como o Linux descobre como iniciar processos.
Primeiro, há o "Terminal Emulator", no ambiente baseado no Gnome, geralmente é o Gnome Terminal.
Depois, há o "Shell", no Linux, isso geralmente é bash, embora outras shells sejam possíveis.
Um "Shell" é executado dentro de um "Emulador de Terminal". Essa distinção vem da idade dos terminais físicos, onde um terminal físico é o hardware que recebe dados, grava texto em cores, etc., e o Shell é um software que processa o comando do usuário e gerencia outros processos com base nos comandos fornecidos.
Hoje em dia, temos uma tela de uso geral que pode exibir qualquer imagem, portanto não usamos mais um Terminal físico, mas temos "Emuladores de Terminal", um software que emula o trabalho de um terminal físico, e o Shell, que ainda é o mesmo shell velho que anteriormente (bem, os shells modernos se aproveitam de estar em um emulador de terminal de software, como não sendo limitado pela limitação física de um papel, etc, mas a divisão permanece).
Um "Shell" nem sempre é executado dentro de um emulador de terminal; há também o Graphical Shell, como o Nautilus (dica de sugestão, Nautilus é o nome de uma criatura marinha com um grande shell) ou o Windows Explorer (não deve ser confundido com o Internet Explorer).
Em um shell de linha de comando, por exemplo bash, e uma concha gráfica, e. Nautilus, um executável é marcado por ter seu execute
bit definido.
Em um shell de linha de comando, você pode usar ls -l
para exibir os bits de permissão de um arquivo, por exemplo, rwxrwxrwx significa que todos podem ler / escrever / executar o programa; rwxr-xr-- significa que o proprietário tem permissão total, as pessoas no grupo do arquivo podem ler e executar, mas não escrever, e outras pessoas só podem ler o arquivo. No Nautilus, você pode clicar com o botão direito do mouse em um arquivo > Propriedades > Aba de permissão. Na página de propriedades Permissão, você pode obter a permissão do arquivo, semelhante ao shell da linha de comando.
Um arquivo que tem seu conjunto de bits de execução é tratado como executável e pode ser executado fazendo-se ./filename (shell de linha de comando) ou clicando duas vezes (shell gráfico).
Por último, existem algumas outras sutilezas sobre como um shell executa um arquivo. Na maioria dos shell Linux, você pode "executar" um script escrito em python / perl / php / bash que não é um executável compilado. Como esses arquivos não são compilados nativamente, eles precisam de um intérprete (por exemplo, interpretador python) para ser executado. Ao contrário do shell do Windows (Explorer), que descobre o intérprete para invocar através da extensão do arquivo; O shells do Linux descobre o interpretador correto olhando a linha "hashbang" que se parece com isso
#!/usr/bin/python
quando o bit de execução de um arquivo é definido e o arquivo tem essa linha de hashbang, o shell invocará o interpretador / usr / bin / python com o arquivo atual como argumento.
O Nautilus também pode reconhecer quando um programa é um aplicativo de linha de comando e oferece a você a execução do aplicativo dentro de um Terminal. Quando você clica duas vezes em um script executável, o Nautilus pergunta se você deseja executá-lo em um Terminal, executar sem Terminal ou editar o arquivo em um Editor de Texto.