A função shell é melhor que a mesma função no PATH?

1

Eu tenho sido um pouco confuso sobre o uso estranho de funções de shell.

Minha definição de uma função shell : uma função que está em .bashrc tal que

.bashrc

--- other default bash configs ----

extract() {     // I call this a shell function
   ....
}

Minha definição de uma função colocada em PATH : um arquivo cuja pasta está no PATH. Por exemplo, temos o arquivo ~ / bin / screen / convert.screen

Para adicionar o arquivo e outros arquivos na pasta ao meu PATH, posso ter o seguinte PATH

 export PATH='/Users/masi/bin/screen:' 

Eu gostaria de saber quando devo colocar a função como uma função de shell de login e quando para o meu PATH. Eu prefiro o último no momento, já que o primeiro aumenta os custos de manutenção.

Qual é a vantagem de uma função de shell feita pelo usuário que uma função em seu PATH não possui?

    
por Léo Léopold Hertz 준영 26.07.2009 / 08:14

3 respostas

4

As funções do shell são facilmente modificadas e mantidas. Você deve adicioná-las ao seu PATH quando souber que sempre precisará delas (mesmo que com muito menos frequência), ao contrário de uma coisa temporária. Não há necessidade de carregar um arquivo rc tão grande que você continue adicionando quando você sabe que não vai precisar de tudo nele o tempo todo. Se houver uma função grande que você usa com menos frequência, mas é muito importante, torne-a acessível a partir de seu PATH , para que você possa acessá-la somente quando precisar dela.

    
por 26.07.2009 / 08:20
1

Ajudaria se você concordasse com o mais ccepted descrição da função shell como uma função escrita em um arquivo (script) que pode ser originado para carregar no seu shell e usado em outros scripts e comandos shell .

Se tomarmos essa interpretação do termo, as funções do shell facilitarão sua vida com 'funções' em seus scripts e comandos.

Indo além, você também pode considerar escrever suas 'funções' menos usadas em um arquivo separado e armazenando isso com seus outros scripts. Quando você precisar deles, você pode simplesmente fornecer esse script para o seu shell.

    
por 26.07.2009 / 12:59
1

Eu uso funções shell para coisas que são razoavelmente pequenas e auto-suficientes, e que são comandos auxiliares para o shell, em vez de programas completos em seu próprio direito. Uma vez que algo se torna um programa adequado, eu escrevo como tal e movo-o para o diretório bin na minha pasta $HOME (que já está no meu PATH ).

Veja um exemplo:

# Start mpd (if necessary), search for music using mpc, play music.
mp-start()
{
    ps -C mpd > /dev/null || mpd
    mpc search any $1 | mpc add -
    mpc play
}

Essa é uma função, não um programa. Há muito pouco para isso, e eu só vou usá-lo se eu já estiver trabalhando no shell.

Eu também acho mais limpo colocar todas as funções do meu shell em um arquivo separado ( .bash_functions para mim, mas eu acho que você é um usuário do shell Z, então ajuste de acordo) do arquivo rc principal do meu shell. Uma última dica é adicionar algo assim a seus aliases:

alias refunction='vim ~/.bash_functions; source ~/.bash_functions'

Isso permite que você crie uma nova função e fique imediatamente disponível assim que terminar de editar.

    
por 26.07.2009 / 13:18

Tags