Depende da função. Se for apenas uma linha única super simples como essa, você poderá criar um alias ou colar a função ~/.bashrc(um arquivo que o bash carrega quando é iniciado).
Se você estiver criando algo um pouco mais complexo, pode fazer mais sentido criar seu próprio script executável no ~/bin/qual não existirá por padrão (é apenas um diretório), mas deve estar no seu caminho. Lembre-se disso, o arquivo precisará ser executável ( chmod +x filename) e começar com uma #!/bin/bashestrofe adequada .
A segunda rota tem alguns benefícios claros:
É mais fácil ver o que está disponível
Um erro de sintaxe não irá afetar seu perfil
Você não precisa continuar pesquisando novamente sua configuração do bash se alterar o script
Está disponível para qualquer shell, desde que o caminho completo seja usado ou também ~/bin/esteja no caminho para esse shell (que deve ser, na maioria dos casos, AFAIK).
Eu usei a opção posterior. Minha função contém comandos que excluem arquivos, algo do wget, executa os comandos javac e java. e quando eu tentei no terminal gnome, não está funcionando bem. Você acha que há um problema?
Abel Melquiades Callejo
O que ele faz em vez disso?
Oli
Já está consertado. Corrigido através desta resposta
Abel Melquiades Callejo 13/09
umm ... os scripts do usuário não deveriam estar /usr/local/binmexendo com o $PATH?
Braiam 15/09/13
Parece-me que uma vantagem pequena, mas que vale a pena mencionar, de colocar funções ~/.bashrc(como é sourced) é que o Bash procura funções antes de fazer a pesquisa PATH.
Zanna
4
A melhor opção seria ~/.bashrcarquivar.
Você pode escrever suas definições de função de shell diretamente em seu ~/.bashrcarquivo ou, se você tiver muitas delas e não quiser desorganizar seu ~/.bashrcarquivo, poderá colocá-las em outro arquivo de sua escolha - apenas certifique-se de que arquivo no seu ~/.bashrcarquivo. Por exemplo, se o arquivo com suas funções for nomeado bash_functions, basta adicionar no seu ~/.bashrcarquivo as linhas:
if[[-f /path/to/bash_functions ]];then
source /path/to/bash_functions
fi
ou equivalente:
if[[-f /path/to/bash_functions ]];then./path/to/bash_functions
fi
onde o .é apenas uma representação simbólica de source. O ifteste garante que o arquivo /path/to/bash_functionsexista antes de tentar a origem.
Essa técnica é muito semelhante ao estabelecimento de aliases ~/.bashrc, criando um arquivo chamado ~/.bash_aliasese usando uma sintaxe semelhante à descrita acima ~/.bashrcpara testar sua existência e, em seguida, fonte-lo.
obrigado, funcionou. a propósito, qual é a sua diferença com .profile? em alguns linux, eu não posso colocar funções em bashrc
Abel Melquiades Callejo
2
~/.profileO arquivo é executado pelo interpretador de comandos para shells de login. Quando você usa a GUI e abre o terminal, esse arquivo não é executado porque você estará em um shell que não é de login.
Radu Rădeanu
1
Aqui está um procedimento essencial para declarar uma função permanente:
Abra o ~/.bashrcarquivo em um editor de texto. Não importa qual editor de texto, desde que você saiba como usá-lo e desde que você abra o/home/<username>/.bashrc
No final do ~/.bashrcdeclarar sua própria função, por exemplo:
find_dirs(){
find "$1"-type d
}
Salve e feche o arquivo.
O ~/.bashrcarquivo é lido toda vez que você abre o shell interativo (que é a nova guia do terminal, sshefetua login ou abre o TTY1 ou outro console virtual). Isso não estará disponível nos arquivos de script, porque ~/.bashrcnão é lido para shells não interativos. Também não está disponível se você executar bashcom a --norcopção
Se você deseja que a função esteja disponível imediatamente na guia atualmente aberta, use o source ~/.bashrccomando
Funções recebem argumentos como comandos regulares. Por exemplo, $1através de $9indica os parâmetros posicionais quando você chama uma função. No exemplo acima, find_dirspega apenas um parâmetro posicional e seria chamado como find_dirs /etc. Você também pode usar $@para se referir a todos os parâmetros posicionais. As funções também aceitam o redirecionamento. Você pode chamar uma função com find_dirs $1 > /dev/null; também podemos declarar da seguinte forma:
find_dirs(){
find "$1"-type d
}
Nota de man bash: "As funções são executadas no contexto do shell atual; nenhum novo processo é criado para interpretá-las". Isso significa que você também deve estar ciente das funções com capacidade de alterar o ambiente de execução do shell - alterar variáveis e configurações do terminal.
/usr/local/bin
mexendo com o$PATH
?~/.bashrc
(como ésource
d) é que o Bash procura funções antes de fazer a pesquisa PATH.A melhor opção seria
~/.bashrc
arquivar.Você pode escrever suas definições de função de shell diretamente em seu
~/.bashrc
arquivo ou, se você tiver muitas delas e não quiser desorganizar seu~/.bashrc
arquivo, poderá colocá-las em outro arquivo de sua escolha - apenas certifique-se de que arquivo no seu~/.bashrc
arquivo. Por exemplo, se o arquivo com suas funções for nomeadobash_functions
, basta adicionar no seu~/.bashrc
arquivo as linhas:ou equivalente:
onde o
.
é apenas uma representação simbólica desource
. Oif
teste garante que o arquivo/path/to/bash_functions
exista antes de tentar a origem.Essa técnica é muito semelhante ao estabelecimento de aliases
~/.bashrc
, criando um arquivo chamado~/.bash_aliases
e usando uma sintaxe semelhante à descrita acima~/.bashrc
para testar sua existência e, em seguida, fonte-lo.fonte
~/.profile
O arquivo é executado pelo interpretador de comandos para shells de login. Quando você usa a GUI e abre o terminal, esse arquivo não é executado porque você estará em um shell que não é de login.Aqui está um procedimento essencial para declarar uma função permanente:
Abra o
~/.bashrc
arquivo em um editor de texto. Não importa qual editor de texto, desde que você saiba como usá-lo e desde que você abra o/home/<username>/.bashrc
No final do
~/.bashrc
declarar sua própria função, por exemplo:Salve e feche o arquivo.
O
~/.bashrc
arquivo é lido toda vez que você abre o shell interativo (que é a nova guia do terminal,ssh
efetua login ou abre o TTY1 ou outro console virtual). Isso não estará disponível nos arquivos de script, porque~/.bashrc
não é lido para shells não interativos. Também não está disponível se você executarbash
com a--norc
opçãoSe você deseja que a função esteja disponível imediatamente na guia atualmente aberta, use o
source ~/.bashrc
comandoFunções recebem argumentos como comandos regulares. Por exemplo,
$1
através de$9
indica os parâmetros posicionais quando você chama uma função. No exemplo acima,find_dirs
pega apenas um parâmetro posicional e seria chamado comofind_dirs /etc
. Você também pode usar$@
para se referir a todos os parâmetros posicionais. As funções também aceitam o redirecionamento. Você pode chamar uma função comfind_dirs $1 > /dev/null
; também podemos declarar da seguinte forma:Nota de
man bash
: "As funções são executadas no contexto do shell atual; nenhum novo processo é criado para interpretá-las". Isso significa que você também deve estar ciente das funções com capacidade de alterar o ambiente de execução do shell - alterar variáveis e configurações do terminal.fonte