Talvez eu esteja vendo isso da maneira errada. Mas aqui estou o que estou tentando fazer. Realizei a maior parte do meu trabalho com Java, mas apenas 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 poder chamá-las separadamente da linha de comando. myFunc.ls2()
Ou seja: ou apenas ls2
. Eu sei que posso adicionar as funções ao meu .bashrc
arquivo, mas existe alguma outra maneira de executar essas funções sem adicioná-las ao meu .bashrc
?
Outra abordagem seria criar um script chamado
functions.sh
(no~/bin
diretório por exemplo).Neste script, você adiciona todas as suas definições de funções pessoais (digamos que toda vez que você adiciona uma função, você a adiciona a este arquivo ...)
Finalmente, você apenas precisa adicionar a
source ~/bin/functions.sh
linha ao seu.bashrc
arquivo. Dessa forma, você poderá chamá-los na linha de comando,.bashrc
permanecerá limpo e terá um local específico para suas funções pessoais.fonte
Se você é como eu, não deseja desorganizar 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 pode servir ao mesmo propósito). Aqui está uma solução possível que permite chamar uma função específica no script:
fonte
source
que isso, pois ele pode lidar com duas funções com o mesmo nome em dois arquivos sh diferentes. I refinado-lo para lidar com um número arbitrário de parâmetros, substituindo$1 $2 $3 $4 $5
comFUNC_CALL=$1; shift; $FUNC_CALL "$@"
"$@"
. PS: Sua abordagem está realmente errada; a última parte deve estar"$FUNC_CALL" "$@"
(ou seja,$FUNC_CALL
entre aspas)."$FUNC_CALL"
?O operador de ponto ou
source
embutidobash
é análogo àimport
declaração em Java.Você pode ler mais sobre o operador de ponto ou o
source
interno .fonte