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

Eu tenho um script.sh o arquivo e o tipo desse arquivo são o arquivo shellscript. Eu quero fazer este arquivo como application / x-executable file. Como posso fazê-lo?

Você pode marcar o arquivo como executável:

chmod +x filename.sh

Você pode então executá-lo assim:

./filename.sh

Se você quiser usar um comando diferente para iniciá-lo, você pode 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 ou tipo de terminal source ~/.bashrc em seu terminal para aplicar.Em seguida, basta usar o novo nome para iniciar o script.

Existem duas maneiras de tornar um arquivo executável:

Método GUI:

Clique com o botão direito do mouse no arquivo e selecione Propriedades.Vá para a guia Permissões e marque a caixa Execute: [ ] Allow executing file as program ou em Nautilus Program: [ ] Allow this file to run as a program em Thunar.

Método Terminal / comando:

Você pode usar:

cd /to/my/required/directory

Executar

chmod +x filename.extension

Ou apenas correr:

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 leitura, w para gravação e X para execução.

Então, para permitir que todos o leiam, 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)

Portanto, existem esses números:

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

Escrever pelo Usuário é 200.Escrever por grupo é 020.Escrever por outro é 002.

Ler pelo Usuário é 400.Leia por grupo é 040.Lido por outros é 004.

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

Então, para permitir que todos o leiam, 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 soma-se a 600 + 050 + 004 = 654.

Você poderia então executar o comando.

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

E para definir todas as permissões que 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 quaisquer outras permissões (por exemplo, executar permissões).

Site tem uma pequena coisa de caixa de seleção de grade muito útil, em que você pode marcar as opções desejadas e dá - lhe o comando:

enter image description here

No entanto, nem todas as combinações possíveis são sensatas de usar; as principais que são usadas são as seguintes:

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

700 - Owner ter

644 - Owner pode ler e escrever, e Group e Other pode 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 Other pode ler

770 - Owner e Group tenha 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 Group pode ler

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

Obrigado Ilmari Karonen para sublinhar aqueles em uso comum!

Executar:

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

Deixe todos os usuários executarem seu script

Conforme declarado, você pode definir o bit de execução do arquivo para torná-lo executável com chmod +x. Mas você também pode usar chmod a+x:

$ ll file_command.txt-rw-rw-r-- 1 rick rick 17 Sep 19 08:55 file_command.txt$ chmod a+x file_command.txt$ ll file_command.txt-rwxrwxr-x 1 rick rick 17 Sep 19 08:55 file_command.txt*

NOTA:

  • Um script não precisa terminar com .sh pode terminar em .txt como mostrado aqui, ou não tem nenhuma extensão.
  • Em vez de apenas +x (somente você pode executar o script), use a+x assim, todos os usuários podem executar o script.
  • O nome do arquivo tem um * anexado a ele para indicar que é executável. Além disso, o nome do arquivo muda de cor para verde na maioria dos sistemas.

make script executable


Execute um script sem torná-lo executável

Você ainda pode executar um script bash sem torná-lo executável. Por exemplo:

$ echo "echo Hello World" > file_command.txt$ cat file_command.txtecho Hello World$ bash file_command.txtHello World

NOTA:

  • Primeiro criamos um script contendo echo Hello World.
  • Então confirmamos o script chamado file_command.txt está correcto.
  • Por fim, executamos o script chamando bash e passando o nome do script. O bashcomando é realmente armazenar como /bin/bash e é um executável em todos os sistemas Ubuntu.
  • Criar um arquivo de comandos evita que você adicione o shebang #!/bin/bash como a primeira linha em um script.
  • Criar um arquivo de comandos evita que você o torne executável com chmod +x ou chmod a+x.

relacionado a [como faço para executar arquivos .sh no Terminal?] (command line - How do I run .sh scripts? - Ask Ubuntu)

Possível duplicata de [Como faço para executar arquivos .sh?] (command line - How do I run .sh scripts? - Ask Ubuntu)

Não é uma duplicata, porque perguntei especificamente sobre como torná-la application/x-executável. A outra pergunta apenas pede para abrir o arquivo SH no terminal.