Como tornar um arquivo (por exemplo, um script .sh) executável, para que possa ser executado a partir de um terminal


245

Eu tenho um arquivo script.sh e o tipo desse arquivo é um arquivo shellscript. Eu quero tornar esse arquivo como aplicativo / arquivo x-executável. Como posso fazer isso?



1
Possível duplicata de Como executo arquivos .sh?
22617

Não é uma duplicata, porque perguntei especificamente sobre como torná-lo application / x-executável. A outra pergunta apenas pede para abrir o arquivo sh no terminal.
Ziyaddin Sadigov 14/08/19

Respostas:


326

Você pode marcar o arquivo como executável:

chmod +x filename.sh

Você pode executá-lo assim:

./filename.sh

Se você quiser usar um comando diferente para iniciá-lo, poderá adicionar um alias:

gedit ~/.bashrc

Adicione isso no final do arquivo:

alias <new name>='/home/<full path to script>/filename.sh'

Abra uma nova sessão do terminal ou digite source ~/.bashrcseu terminal para aplicar. Em seguida, basta usar o novo nome para iniciar o script.


Você sabe como usar o comando sudo depois de inserir o comando como: "alias command1 = '/home/user_name/dir/script.sh'. No meu, ele funciona sem o sudo, mas não com ele.
Aditya

Você precisa reiniciar o bash após editar o .bashrc run: exec bash para reiniciar o bash.
Sampath Perera

2
Por que o arquivo executável é ./filename.she não apenas filename.sh?
precisa saber é o seguinte

@ user1993 sim, eu também estou procurando uma maneira de torná-lo executável apenas filenamee não./filename
MycrofD

@ user1993 Geralmente, o uso ./filename.shespecifica um arquivo no diretório atual e o uso filename.shespecifica um arquivo no diretório atual ou em qualquer diretório do PATH. O primeiro uso remove qualquer incerteza sobre qual arquivo é acessado. Nesse caso, você está tentando executar o script com bash ou outro intérprete (em virtude de assumido #!/bin/bashcomo primeira linha no seu script) apenas digitando o nome do arquivo. Esse uso requer que o diretório seja especificado. Como alternativa, você pode tentar o bash filename.shque parece funcionar com o diretório não especificado.
a505999

37

Existem duas maneiras de tornar um arquivo executável:

Método da GUI:

Vá para a guia permissões e marque a caixa `Executar: [] Permite executar o arquivo como programa.

insira a descrição da imagem aqui

Terminal / método de 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 possui algumas opções mais avançadas:

Os espaços devem mostrar que está dividido: - rwx --- ---

O primeiro conjunto de ---é Usuário. O segundo é o grupo e o último é outro (qualquer outra pessoa)

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

Portanto, para permitir que todos os leiam, mas apenas o Grupo execute e o Usuário leia e escreva (mas por algum motivo não execute) seria:

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

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

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

Portanto, existem estes números:

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

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

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

Em seguida, adicione-os para obter a combinação desejada.

Portanto, para permitir que todos os leiam, mas apenas o Grupo execute e o Usuário escreva (mas por algum motivo não execute) seria:

400 + 040 + 004e 010e200

Isso soma 600 + 050 + 004 = 654.

Você pode então executar o comando.

chmod +654 /path/to/file.extension para configurá-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 leitura e gravação para o usuário, sem afetar outras permissões (por exemplo, permissões de execução).

Este site possui uma caixa de seleção de grade muito útil, na qual você pode marcar as opções desejadas e fornecer o comando:

insira a descrição da imagem aqui

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

755 - Ownertem tudo Groupe Otherpode ler e executar

700 - Ownertem tudo

644 - Ownerpode ler e escrever Groupe Otherpode ler

600 - Ownersabe ler e escrever

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

775 - Ownerpode ler e escrever Groupe Otherpode ler

770 - Ownere Grouptem tudo, e Otherpode ler e executar

750 - Ownertem tudo e Grouppode ler e executar

664 - Ownere Grouppode ler e escrever, e Otherpode apenas ler

660 - Ownere Grouppode ler e escrever

640 - Ownerpode ler e escrever e Grouppode ler

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

Obrigado Ilmari Karonen por apontar os que são de uso comum!


Não é baseado em octal (8 bases) em vez de binário (2)? No binário, você pode ter apenas 0 e 1, enquanto no octal, você pode ter 0, 1, ... 6, 7
Justinas

@Justinas binário em que 7 = 4 + 2 + 1 - 111 representa Leitura e Gravação e Execução.
Tim

8

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 o .sharquivo:

vi tester12.sh

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

:wq!
chmod +x tester12.sh
./tester12.sh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.