Como chamar funções bash

25

Talvez eu esteja olhando para o caminho errado .. Mas aqui estou o que estou tentando fazer. Faço a maior parte do meu trabalho com Java, mas mudei para um ambiente unix (bash). Eu estou fazendo isso:

[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash

ls2(){
        echo "Hello World"
}

ls3(){
        echo "Testing"
}

echo "this is a test"   
ls2 # this calls a function

[~/Desktop/bashPlay]% myFunc
this is a test
Hello World

Mas eu tenho duas funções no meu arquivo e quero chamá-las separadamente da linha de comando. Ou seja: myFunc.ls2() ou mesmo apenas ls2 . Eu sei que posso adicionar as funções ao meu arquivo .bashrc , mas existe alguma outra maneira que eu possa executar essas funções sem adicioná-las ao meu .bashrc ?

    
por sixtyfootersdude 08.02.2010 / 16:25

4 respostas

22

Uma maneira de fazer isso, que envolve um pouco mais de digitação, é através do comando source . Para chamar uma função do myFunc, você poderia usar source myFunc; ls2 e o resultado seria Hello World.

Por exemplo, eu tenho um arquivo chamado say.sh :

#!/bin/bash

function talk()
{
        echo "hi!"
}

agora quero chamar a função talk() da linha de comando:

[john@awesome ~]$ source say.sh; talk
hi!

para chamá-lo de outro script bash:

#!/bin/bash
source say.sh
talk

Você também pode colocar cada um em um script separado e adicioná-los em um diretório que esteja em sua variável PATH.

por exemplo, em um script chamado hello você teria:

#!/bin/bash
echo "Hello World"

agora coloque-o em um dos diretórios em seu PATH, que você pode visualizar executando echo $PATH . Você pode adicionar outro diretório ao seu PATH se quiser ou usar um já existente. Depois de copiar o arquivo, torne-o executável com chmod +x filename .

    
por 08.02.2010 / 16:29
4

Outra abordagem seria criar um script chamado functions.sh (no diretório ~/bin , por exemplo).

Neste script, você adiciona todas as suas definições de função pessoal (digamos que toda vez que você adicionar uma função, você a adiciona a este arquivo ...)

Finalmente, basta adicionar a linha source ~/bin/functions.sh ao seu arquivo .bashrc . Dessa forma, você poderá chamá-los na linha de comando, seu .bashrc permanecerá limpo e você terá um local específico para suas funções pessoais.

    
por 21.02.2010 / 19:54
4

Se você é como eu, não quer confundir seu ambiente com funções. Você também tem um grupo de funções que pertencem juntas em termos do que elas fazem, portanto, colocá-las no mesmo arquivo de script faz sentido. (Eu sei que uma pasta com vários arquivos poderia servir o mesmo propósito). Esta é uma solução possível que permite chamar uma função específica no script:

$ cat functions.sh    
#!/bin/bash

ls2() {
        echo "Hello World"
}

ls3() {
        echo "Testing $*"
}

# the next line calls the function passed as the first parameter to the script.
# the remaining script arguments can be passed to this function.

$1 $2 $3 $4 $5 

$ ./functions.sh ls2    
Hello World   
$ ./functions.sh ls3    
Testing     
$ ./functions.sh ls3 first_arg    
Testing first_arg    
$
    
por 29.07.2011 / 17:08
0

O operador ponto ou source integrado em bash é análogo à instrução import em Java.

Você pode ler mais sobre o operador de pontos ou o source builtin .

    
por 08.02.2010 / 17:02

Tags