Como faço um script de shell no Ubuntu Terminal?

3

Agora eu não sei se é exatamente o que é chamado, então, por favor, perdoe a minha terminologia ruim e corrija-me se estiver errado, mas estou procurando uma maneira de encurtar esse código:

gcc -o hello hello.m \

-I 'gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS' \

-L 'gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES' \
-lgnustep-base -fconstant-string-class=NSConstantString \

-D_NATIVE_OBJC_EXCEPTIONS

Agora, para esclarecer, esse código me permite executar ou criar / executar um programa objetivo-c que eu construo. Demorei algum tempo para realmente encontrá-lo como eu estava tendo erros na compilação de object-c no Ubuntu anteriormente, mas esse código funciona. Agora eu não me importo de digitá-lo toda vez, se eu também tiver, mas eu sinto que há um jeito mais fácil.

Então existe alguma maneira que eu posso colocar isso em um arquivo de texto e salvá-lo como gcc execute ou algo assim e fazer com que eu tenha que digitar apenas uma linha como:

./gcc execute

para executá-lo e, em seguida, apenas ./-name de obj-c file

e ele executaria meu programa?

Agora eu não estou procurando exatamente por essa forma de método, é apenas um exemplo, existe alguma maneira de fazer algo assim?

Isso tornaria as coisas muito mais convenientes, qualquer ajuda é sempre bem vinda!

    
por Casey 08.08.2013 / 20:00

1 resposta

3

Para responder parte do que foi perguntado:

Primeiro, usei 'myDemoScript' em vez de 'gcc' porque fica confuso quando você chama o compilador gnu c (GCC) de um script com o mesmo nome.


1) Primeiro uma maneira básica de fazer isso sem verificar o nome do arquivo:

vim myDemoScript    
i (insert mode on)
#!/usr/bin/env bash
gcc -o hello hello.m  etc etc etc
ESC :wq

chmod +x myDemoScript (torne o script executável).
Depois você pode usar apenas ./myscript.


2) Se você usar bash (ou shells similares), você pode usar $ 0, $ 1.

$ 0 irá conter o nome do programa (por exemplo, no meu caso "myDemoScript".)
$ 1 irá conter o primeiro argumento.

Então, se você chamar "./myDemoScript hello", então, dentro do script, $ 1 conterá "hello"

#$/usr/bin/env bash
echo started the script $0 with $# arguments
echo going to work on the file $1
echo compiling $1.c to produce the output file $1
gcc -o $1 $1.c

(Para mais detalhes google sobre "bash getopts")


3) Para responder como eu faria:

Para trabalhos de compilação: use make .

Make é um exagero para compilar um único arquivo c para um executável, mas é uma boa ferramenta para aprender e você pode usá-lo para muito mais. Também é muito útil se você tiver um projeto com vários arquivos. Especialmente no caso de muitos arquivos ou arquivos que levam muito tempo para compilar.

vim Makefile
i (insert mode on)

hello: 
<TAB> gcc -o hello hello.m -I 'gnustep-config \
       --variable=GNUSTEP_SYSTEM_HEADERS' \
      -L 'gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES' \
      -lgnustep-base -fconstant-string-class=NSConstantString \
      -D_NATIVE_OBJC_EXCEPTIONS

debug_hello: 
<TAB> gcc -g -o hello hello.m -I 'gnustep-config  \
      --variable=GNUSTEP_SYSTEM_HEADERS' \
      -L 'gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES' \
      -lgnustep-base -fconstant-string-class=NSConstantString \
      -D_NATIVE_OBJC_EXCEPTIONS

clean:
<TAB> rm hello

ESC :wq (write and quit)

Com este arquivo na mesma pasta, você pode apenas emitir 'make hello'.
Make irá procurar pelo hello no Makefile .
Ele irá verificar se ele precisa construir quaisquer dependências primeiro (nenhuma é usada ou exemplo), e então executar seu comando de compilação.

Eu adicionei o rótulo * debug_hello * para demonstrar outras opções: por exemplo construindo uma versão de depuração do mesmo programa adicionando o -g flag ao gcc.

O clean é outro bom exemplo. Parcialmente porque mostra a funcionalidade não-GCC. Parcialmente porque é muito bom ter uma maneira de limpar as coisas quando o projeto cresce para incluir dezenas de arquivos.


Make pode fazer muito mais do que o que eu acabei de mostrar, mas isso está ficando fora do tópico. Eu recomendo alguns googling se você está curioso.

    
por Hennes 08.08.2013 / 20:19