combina dinamicamente funções bash em um novo arquivo shell

0

Digamos que eu tenha vários arquivos:

a.sh
b.sh
c.sh
...
z.sh

e cada um desses arquivos tem uma função assim:

   a(){
      echo "fooa" | bash
    }

agora, se eu conseguisse todas as funções em um arquivo, elas se pareceriam com:

   a(){
      echo "fooa" | bash
   }

   b(){
      echo "foob" | bash
   }

   c(){
      echo "fooc" | bash
   }
    ...
   z(){
      echo "fooz" | bash
   }

o problema é que eles estão, de fato, em arquivos separados. O que eu estou procurando fazer é dinamicamente gravá-los em um arquivo, para que um arquivo possa ser originado, ao invés de 10 ou 20 arquivos de origem.

Qual é a melhor maneira de fazer isso?

Uma coisa que eu posso fazer é percorrer os arquivos e anexar o conteúdo deles ao arquivo 1 que eu quero procurar. Existe outra maneira que funcione?

    
por Alexander Mills 13.05.2018 / 07:47

1 resposta

3

cat *.sh > all.sh iria concatenar todos os arquivos para um. Isso é um pouco sujo, pois *.sh também corresponderá a all.sh se ele já existir, mas o redirecionamento será limpo all.sh antes que cat seja executado aqui.

Você também pode escrever um script para obter todos os outros (chame-o de includeall.sh ):

for f in *.sh; do
    if [ "$f" != "includeall.sh" ]; then
        . "$f"
    fi
done

Em seguida, digite isso com . includeall.sh . O if está lá para evitar a inclusão de includeall em si. Embora não seja uma má idéia colocar os scripts a.sh .. z.sh em um diretório separado. Isso tornaria a estrutura de diretórios mais limpa e dificultaria a origem acidental de qualquer script errado. for f in dir/*.sh; do . "$f"; done nesse caso.

    
por 13.05.2018 / 11:10