Renomeando um arquivo de myFile.sh para myFile.bash?

1

PARTE 1 Ok, então eu estou usando o Mac e comecei com um arquivo chamado ...

Exemplo: myFile.sh

No Terminal, executei este arquivo em seu diretório digitando ...

bash myFile.sh

Isso funciona perfeitamente, mas eu fiz algumas pesquisas sobre o bash vs sh e descobri que eu poderia ter escrito também assim ...

sh myFile.sh

Isso também funcionou. Eu fiz mais algumas pesquisas e uma idéia veio à mente, que como o bash é a maneira "mais nova" de fazer as coisas, eu pensei em tentar renomear myFile.sh para myFile.bash para ver se ele ainda rodaria no terminal se eu digitado isso ...

bash myFile.bash

E funcionou perfeitamente! Mas agora eu estou querendo saber se há uma razão que o arquivo foi originalmente chamado myFile.sh em vez de myFile.bash

Então, é ruim ter renomeado para myFile.bash em vez de myFile.sh ? Ou é totalmente legal?

(sou novo nos comandos do terminal)

PARTE 2

Outra questão: Como eu faria este executável "myFile.sh"? Este é o conteúdo de myFile.sh abaixo:

#!/bin/bash 
python runtime/recompile.py "$@"

NOTA: Fiz algumas pesquisas e tentei renomear myFile.sh para myFile.command, o que deve torná-lo executável quando abro o arquivo, mas não funcionou e recebi esse erro no Terminal:

python: can't open file 'runtime/recompile.py': [Errno 2] No such file or directory

Então minhas perguntas realmente são:

a) Como faço o executável myFile.sh no Terminal? b) Por que não renomear myFile.sh para myFile.command?

Qualquer ajuda apreciada.

    
por Jacob 05.12.2011 / 04:04

3 respostas

3

Tudo bem, ele funcionará com extensões diferentes e sem extensão também. As extensões de arquivo não têm sentido no Unix (referência: link ). As extensões são úteis para os humanos identificarem arquivos rapidamente.

Você provavelmente deve usar a extensão .sh , pois é mais popular e mais curta que .bash .

    
por 05.12.2011 / 04:12
3

Você provavelmente deve tornar esses arquivos executáveis usando chmod +x filename e especificar o interpretador de scripts na primeira linha (shebang):

#!/bin/bash

Ou para respeitar $PATH :

#!/usr/bin/env bash

Desta forma, o próprio arquivo especifica qual interpretador de script deve ser usado. Você pode até mesmo especificar argumentos para bash dessa maneira. Se você precisar da configuração aplicada aos shells de login em seu script, poderá fazer o seguinte:

#!/bin/bash --login

O uso de uma extensão de arquivo personalizada, como .bash , pode interromper processos não óbvios, como transferências de arquivos FTP, se você também estiver usando sistemas Windows: Muitos programas FTP tratam arquivos com extensões específicas como texto, alterando os términos de linha. Se você usar extensões de arquivo não padrão para seus scripts, isso não acontecerá e os caracteres \r (retorno de carro) do Windows serão mantidos.

Sua renomeação para .command provavelmente não funciona, já que seu diretório de trabalho mudou junto com o modo como você executa o arquivo. Será sempre executado em $HOME , por ex. /Users/danielbeck e os caminhos relativos precisam começar por aí. É mais seguro fornecer um caminho absoluto.

Se você não precisar de uma janela do Terminal para a execução do programa, você também poderá usar Automator e sua ação Executar Script de Script para criar um aplicativo ou serviço. com atalho de teclado opcional em Preferências do Sistema »Teclado» Atalhos de Teclado »Serviços .

Você precisa configurar o serviço para receber arquivos e pastas em qualquer aplicativo como entrada, e executá-lo quando tiver arquivos selecionados; se for um aplicativo, você pode arrastar e soltar arquivos nele. Em qualquer caso, configure a ação Executar Script Shell para receber entrada como argumentos .

    
por 05.12.2011 / 11:21
1

A primeira linha de um script de shell executável deve ser uma " shebang "; a sequência #! é um "número mágico" que informa ao sistema que o resto da linha especifica um intérprete para o qual ele passará o nome do seu script.

Por exemplo, se você tiver um arquivo chamado "foo" (sem sufixo necessário) que se pareça com isto:

#!/bin/sh

echo This is foo

e você executou chmod +x foo (isso é importante!), então:

./foo

é equivalente a isto:

/bin/sh ./foo

e produzirá a saída This is foo .

Você pode chamar o script foo.sh , por exemplo, se quiser enfatizar que é um script de shell, mas não é necessário. (Normalmente, não há razão para o usuário se importar com a forma como ele é implementado; nesse caso, você pode chamá-lo de foo , que pode ser um script de shell, um script Perl ou Python ou um executável compilado.)

Qual é a diferença entre #!/bin/sh e #!/bin/bash ? Para a maioria das finalidades, eles são intercambiáveis. /bin/sh é geralmente o Bourne Shell, que remonta aos primórdios do Unix; você encontrará versões dele em todos os sistemas semelhantes ao Unix, incluindo Linux e MacOS. /bin/bash é o "Bourne-Again Shell" do GNU, que inclui a funcionalidade padrão do shell Bourne, além de um número de extensões.

Se você usar apenas recursos que são suportados pelo Bourne shell, provavelmente é melhor usar #!/bin/sh apenas como uma questão de estilo, e para tornar mais provável que seu script seja executado sem alteração em outros sistemas (o que pode não tem o Bash instalado).

Se você usar recursos específicos do Bash, precisará usar #!/bin/bash .

    
por 06.12.2011 / 10:45

Tags