função de script de exportação

3

Estou tentando implementar a solução encontrada aqui . No entanto, um colega de trabalho sugeriu que, em vez de adicionar funções diretamente a um arquivo .bash_profile ou .bashrc, os scripts personalizados fossem colocados em seu próprio arquivo e vinculados de forma suave em / usr / bin. Eu fiz isso (e tornei o script executável), mas parece que não funciona. Eu acho que as funções precisam ser exportadas, mas não sei como.

Como eu exporto as funções de script personalizadas para que elas fiquem no caminho? eg: Então eu posso executá-los como qualquer outro comando.

EDIT # 1:

Eu encontrei este (e tentei mas ainda não parece funcionar, não tenho certeza do que estou fazendo de errado agora ...

    
por javamonkey79 10.10.2011 / 19:51

3 respostas

4

Um script não pode enviar as definições para você. Você tem que trazê-los do script, sourcing-los. Isso é feito por . /usr/bin/cdjs (se o script estava em / usr / bin / cdjs). Depois disso, você pode usar cdjs a qualquer momento.

Seu colega de trabalho pode ter sugerido criar os scripts de funções. A função cdjs pode ser feita como um script, mas para que funcione, você precisa criar o script toda vez que usá-lo, assim: . cd2js .

Para fazer isso, você teria um arquivo /usr/bin/cd2js que é executável e contém:

$/bin/sh
cd /domains/"$1"/applications/j2ee-apps

Se você costuma fazer um número limitado de coisas nesse diretório, convém criar vários scripts que façam essas coisas para você.

Então você pode ter um script como este:

#!/bin/sh

ls /domains/"$1"/applications/j2ee-apps/

E coloque em /usr/bin/lsj2 . Então você pode fazer lsj2 some-domain-1 a qualquer momento para ver o conteúdo.

    
por 10.10.2011 / 20:21
6

Há duas coisas totalmente separadas no trabalho aqui. Os scripts do shell são arquivos executáveis que podem ser executados diretamente, portanto, se você criou o arquivo /usr/bin/foo (você não deveria colocar coisas manualmente , mas de qualquer forma), você seria capaz de executar foo e executaria isso:

$ cat /usr/bin/foo
#!/bin/bash
echo One

$ foo
One

As funções também são executáveis por nome, mas precisam ser definidas primeiro, o que acontece quando você as digita diretamente em um shell ou como fonte do arquivo que as contém com os comandos source ou . :

$ function bar() {echo Two;}

$ bar
Two

$ cat functions.sh
function baz() {echo Three;}

$ baz
command not found: baz

$ . functions.sh

$ baz
Three

Definir funções em arquivos que estão no seu caminho não fará nada; você ainda precisa fornecer esses arquivos em um script de login. Se você quiser criar scripts separados, você pode simplesmente nomeá-los da mesma forma que suas funções e se livrar completamente da função, então você pode simplesmente chamar o script pelo nome

    
por 10.10.2011 / 20:20
0

Talvez eu precise colocar cada função em seu próprio arquivo com o nome da função como o nome do arquivo e quebrar o código fora das funções? Eu acho que poderia ter um único script com múltiplas funções exportadas para o caminho ...

    
por 10.10.2011 / 20:01

Tags