Questão Como fazer um arquivo executável (por exemplo, um script .sh), para que possa ser executado a partir do terminal


Eu tenho um arquivo script.sh e tipo deste arquivo é um arquivo shellscript. Eu quero fazer este arquivo como arquivo application / x-executável. Como posso fazer isso?


182
2017-12-16 12:27


origem


relacionado a Como faço para executar arquivos .sh no Terminal? - TuKsn
Duplicação possível de Como faço para executar arquivos .sh? - karel
Não é uma duplicata, porque eu perguntei especificamente sobre como torná-la application / x-executable. A outra questão apenas pede para abrir o arquivo sh no terminal. - Ziyaddin Sadigov


Respostas:


Bem, você pode fazê-lo fazendo o que

chmod +x filename.sh

por isso vai executar quando você ligar vai

./filename.sh

e você pode acessar esse script como aplicativo também.

Abra seu terminal e digite como abaixo em seu diretório pessoal.

gedit .bashrc

então no arquivo aberto, digite isso na última linha.

alias <Name_with which you wanna call it >='./filename.sh'

salvar e fechar .

Então digite isso no seu terminal source ~/.bashrc para aplicar as alterações feitas. Em seguida, basta digitar o nome que você deu lá após o alias para acessar seu script.

Certifique-se de ter colocado no diretório inicial.

outro

alias <Name_with which you wanna call it >='./<path to your script >.sh'

Espero que ajude.


244
2017-12-16 12:33



Você sabe como usar o comando sudo depois de digitar o comando como: "alias command1 = '/home/user_name/dir/script.sh'. No meu, funciona sem sudo, mas não com ele. - Aditya
Você precisa reiniciar o bash depois de editar o .bashrc run: exec bash para reiniciar o bash. - Sampath Perera
Por que o arquivo executável é ./filename.sh e não apenas filename.sh? - user1993
@ user1993 Sim, eu também estou procurando uma maneira de torná-lo executável apenas por filename e não ./filename - MycrofD
@ user1993 Geralmente, usando ./filename.sh especifica um arquivo no diretório atual e usando filename.sh especifica um arquivo no diretório atual ou em qualquer diretório do PATH. O primeiro uso remove qualquer incerteza sobre qual arquivo é acessado. Neste caso, você está tentando executar o script com o bash ou outro interpretador (em virtude do #!/bin/bash como primeira linha no seu script) apenas digitando o nome do arquivo. Esse uso requer que o diretório seja especificado. Alternativamente, você pode tentar bash filename.sh que parece funcionar com um diretório não especificado. - a505999


Existem duas maneiras de tornar um arquivo executável:

Método GUI:

Vá para a aba de permissões, então marque a caixa `Execute: [] Permita a execução do arquivo como programa.

enter image description here

Método de terminal / comando:

Você pode usar:

cd /to/my/required/directory

Então corra

chmod +x filename.extension

Ou apenas execute:

chmod +x /path/to/your/filename.extension

chmod também tem algumas opções mais avançadas:

Os espaços são para mostrar que está dividido: - rwx --- ---

O primeiro conjunto de --- é usuário. O segundo é Grupo e o último é Outro (qualquer outra pessoa)

r significa Read, w para Write e x para eXecute.

Então, para permitir que todos possam lê-lo, mas apenas o grupo para executar e o usuário para ler e escrever (mas por algum motivo não executar) seria:

-rw- rx- r-- Mas isso seria adicionado ao comando como:

chmod +rw-rx-r-- /path/to/file.extension

chmod também pode fazer isso em números. É baseado em binário (eu acho, como é 1,2 e 4)

Então, existem esses números:

Executar pelo usuário é 100. Executar por grupo é 010. Executar por outro é 001

Escreva pelo usuário é 200. Escreva por grupo é 020. Escreva por outro é 002.

Ler por usuário é 400. Ler por grupo é 040. Lido por outro é 004.

Então você adiciona estes juntos para obter a combinação desejada.

Então, para permitir que todos possam lê-lo, mas apenas o grupo para executar e o usuário para escrevê-lo (mas por algum motivo não executar) seria:

400 + 040 + 004 e 010 e 200

Isso resulta em 600 + 050 + 004 = 654.

Você poderia então executar o comando.

chmod +654 /path/to/file.extension para defini-lo.

E para definir todas as permissões, você pode digitar:

chmod +rwxrwxrwx /path/to/file.extension

Ou (isso é um pouco mais fácil de escrever, mas mais difícil de lembrar de cada um):

chmod +777 /path/to/file.extension

Finalmente, você pode fazer:

chmod -777 /path/to/file.extension

Para tirar todas as permissões de todos.

E:

chmod +300 /path/to/file.extension

Para adicionar e ler para o usuário, sem afetar outras permissões (por exemplo, permissões de execução).

Esse site tem uma pequena caixa de verificação muito útil, onde você pode marcar as opções desejadas e lhe dá o seguinte comando:

enter image description here

No entanto, nem todas as combinações possíveis são sensatas para usar; os principais que são usados ​​são os seguintes:

755 - Owner tem tudo, e Group e Other pode ler e executar

700 - Owner tem tudo

644 - Owner pode ler e escrever, e Group e Otherpode ler

600 - Owner pode ler e escrever

E, se você estiver usando grupos de usuários não triviais:

775 - Owner pode ler e escrever, e Group e Otherpode ler

770 - Owner e Group tem tudo, e Other pode ler e executar

750 - Owner tem tudo, e Group pode ler e executar

664 - Owner e Group pode ler e escrever, e Other pode apenas ler

660 - Owner e Group pode ler e escrever

640 - Owner pode ler e escrever, e Grouppode ler

777 e 666 são raramente usados, exceto em / tmp.

obrigado Ilmari Karonen para apontando os que estão em uso comum!


31
2018-06-18 12:22



Não é baseado em octal (8-base) em vez de binário (baseado em 2)? Em binário você pode ter apenas 0 e 1, enquanto em octal você pode ter 0, 1, ... 6, 7 - Justinas
Binário @Justinas em que 7 = 4 + 2 + 1 - 111 representa Ler e Escrever e Executar. - Tim


Corre:

chmod +x /path/to/file.sh

Para torná-lo não executável, execute:

chmod -x /path/to/file.sh

Por exemplo eu criei .sh Arquivo:

vi tester12.sh

Depois de escrever algum código no editor vi, saio do editor vi:

:wq!
chmod +x tester12.sh
./tester12.sh

7
2018-06-18 12:39