Script gigante ou vários script's [RESOLVIDO]

1. Script gigante ou vários script's [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 15:48h

Pessoas ... tenho a seguinte dúvida de amador

O que é melhor ??? ( ou menos pior )

* Ter um único Script com trocentas linhas ou ter vários scripts pontuais chamados por um central, ou não muda nada ???






  


2. MELHOR RESPOSTA

Slackjeff
slackjeff

(usa Slackware)

Enviado em 04/07/2018 - 16:11h

Depende a chamada! se fizer a chamada de um script externo ele abrirá uma subshell, fica mais lento.
Se usar o . ou source ele é carregando no mesmo processo/shell que o programa principal está.
Ou seja, não pesa... seria o mesmo que usar uma função no programa principal.

Caso o último seria mais viável para o programador não se confundir todo no código!
Por exemplo em uma empresa que trabalhei tinha um script de 100k de linhas, uma bagunça de várias funções... eu peguei e botei as funções maiores externamente, e fiz a chamada como uma biblioteca, claro não mudou o desempenho mas ficou melhor para o programador, no caso eu.
A moral é... depende só de você caso venha chamar como uma biblioteca :p


THE MAGIC SHELL PROGRAMMER.

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
http://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha

Meu PODCAST:
http://podcast.slackjeff.com.br/






3. Re: Script gigante ou vários script's [RESOLVIDO]

Walker Luiz de Freitas
WalkerPR

(usa Linux Mint)

Enviado em 04/07/2018 - 16:17h


Eu havia feito um script de backup mas com o tempo este começou a ficar gigante (muitas linhas) o que dificulta uma atualização futura, caso precisasse reescrever algumas linhas de código.

Então optei por fragmentá-lo, por exemplo:

. . .
DIA=$(date +%w)

echo $DIA

case $DIA in
0) echo "$(date). . .processo SEAGATE executado. . .sem programacao de backup." >> /var/log/processos/BackupManualSeagate.log;;
1) /srv/scripts/backup_segunda.sh;;
2) /srv/scripts/backup_terca.sh;;
3) /srv/scripts/backup_quarta.sh;;
4) /srv/scripts/backup_quinta.sh;;
5) /srv/scripts/backup_sexta.sh;;
6) echo "$(date). . .processo SEAGATE executado. . .sem programacao de backup." >> /var/log/processos/BackupManualSeagate.log;;
*) echo "$(date). . .processo SEAGATE executado. . .opcao de dia da semana invalido." >> /var/log/processos/BackupManualSeagate.log;;
esac
. . .







--------------------------------------------------------------
"Linux, several flavors, a single option: -Freedom of choice!"


4. Re: Script gigante ou vários script's [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 16:25h

slackjeff escreveu:

Depende a chamada! se fizer a chamada de um script externo ele abrirá uma subshell, fica mais lento.
Se usar o . ou source ele é carregando no mesmo processo/shell que o programa principal está.
Ou seja, não pesa... seria o mesmo que usar uma função no programa principal.

Caso o último seria mais viável para o programador não se confundir todo no código!
Por exemplo em uma empresa que trabalhei tinha um script de 100k de linhas, uma bagunça de várias funções... eu peguei e botei as funções maiores externamente, e fiz a chamada como uma biblioteca, claro não mudou o desempenho mas ficou melhor para o programador, no caso eu.
A moral é... depende só de você caso venha chamar como uma biblioteca :p



então .. a intenção é o desmembramento mesmo sacou ... aí rolou a dúvida quanto ao desempenho. Se um script de 100k linhas desmembrado não altera no desempenho então acho que não tenho nada que me preocupar .. o meu não está nem com 1k ainda.

eu só não saquei a parada de chamar o script em subshell ... eu sempre chamei como se fosse executar no terminal ( ./script.sh ) e 1 que chamo com o source ( é o que tem as funções de formatação ).


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



5. Re: Script gigante ou vários script's [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 16:27h

WalkerPR escreveu:


Eu havia feito um script de backup mas com o tempo este começou a ficar gigante (muitas linhas) o que dificulta uma atualização futura, caso precisasse reescrever algumas linhas de código.

Então optei por fragmentá-lo, por exemplo:


O desempenho alterou ( significativo ) ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



6. Re: Script gigante ou vários script's [RESOLVIDO]

Slackjeff
slackjeff

(usa Slackware)

Enviado em 04/07/2018 - 16:30h

Mauriciodez escreveu:

slackjeff escreveu:

Depende a chamada! se fizer a chamada de um script externo ele abrirá uma subshell, fica mais lento.
Se usar o . ou source ele é carregando no mesmo processo/shell que o programa principal está.
Ou seja, não pesa... seria o mesmo que usar uma função no programa principal.

Caso o último seria mais viável para o programador não se confundir todo no código!
Por exemplo em uma empresa que trabalhei tinha um script de 100k de linhas, uma bagunça de várias funções... eu peguei e botei as funções maiores externamente, e fiz a chamada como uma biblioteca, claro não mudou o desempenho mas ficou melhor para o programador, no caso eu.
A moral é... depende só de você caso venha chamar como uma biblioteca :p



então .. a intenção é o desmembramento mesmo sacou ... aí rolou a dúvida quanto ao desempenho. Se um script de 100k linhas desmembrado não altera no desempenho então acho que não tenho nada que me preocupar .. o meu não está nem com 1k ainda.

eu só não saquei a parada de chamar o script em subshell ... eu sempre chamei como se fosse executar no terminal ( ./script.sh ) e 1 que chamo com o source ( é o que tem as funções de formatação ).


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Nessa chamada ./SCRIPT é usado um processo filho/subshell, fica mais lento!
Seria melhor usar uma chamada como se fosse biblioteca mesmo, exemplo:

#!/usr/bin/env bash
#===BIBLIOTECA====
. /home/slackjeff/remover.sh # Não abre subshell
. /home/slackjeff/atualizar.sh # Não abre subshell
source /home/slackjeff/pinpin.conf # Não abre subshell
./home/slackjeff/lalala.sh # Abre subshell, mais lento!




THE MAGIC SHELL PROGRAMMER.

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
http://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha

Meu PODCAST:
http://podcast.slackjeff.com.br/







7. Re: Script gigante ou vários script's

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 16:45h

slackjeff escreveu:
Nessa chamada ./SCRIPT é usado um processo filho/subshell, fica mais lento!
Seria melhor usar uma chamada como se fosse biblioteca mesmo, exemplo:

#!/usr/bin/env bash
#===BIBLIOTECA====
. /home/slackjeff/remover.sh # Não abre subshell
. /home/slackjeff/atualizar.sh # Não abre subshell
./home/slackjeff/lalala.sh # Abre subshell, mais lento!



Se vc exemplificar sem explicar fica confuso pra mim ..

a diferença entre lento e não lento é só 1 espaço depois do ponto ????
isso influi ??? ( #!/usr/bin/env bash )

outra coisa ... a principio não rola de fazer tipo biblioteca, pois esses script funcionam só sacou ... o grosso é um script de automação de pós instalação, então por exemplo ele chama o script "Instala_firefox.sh" por exemplo ... aí o firefox será instalado, mas o script "Instala_firefox.sh", não tem só o comando de instalar, ele tem vários IFS ( por exemplo ) que detectam se é a 1ª instalaçao, se já foi baixado, tem a parte da interatividade , que me pergunta se quer "instalar ou remover", manter ou não as configurações do usuário ... emfim ... ele é um script ( como 90% deles ) autônomo .

Então a maioria dos scripts eu só chamo no ponto onde vai ser necessário.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



8. Re: Script gigante ou vários script's [RESOLVIDO]

Walker Luiz de Freitas
WalkerPR

(usa Linux Mint)

Enviado em 04/07/2018 - 16:56h

Mauriciodez escreveu:

WalkerPR escreveu:


Eu havia feito um script de backup mas com o tempo este começou a ficar gigante (muitas linhas) o que dificulta uma atualização futura, caso precisasse reescrever algumas linhas de código.

Então optei por fragmentá-lo, por exemplo:


O desempenho alterou ( significativo ) ???

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Não notei alteração no desempenho, pois cada dia da semana executa backup em servidor específico, digo, onde mais dados no backup de sexta-feira. Já nos demais dias da semana, backup onde poucas informações.

--------------------------------------------------------------
"Linux, several flavors, a single option: -Freedom of choice!"


9. Re: Script gigante ou vários script's [RESOLVIDO]

Slackjeff
slackjeff

(usa Slackware)

Enviado em 04/07/2018 - 17:13h

Mauriciodez escreveu:

slackjeff escreveu:
Nessa chamada ./SCRIPT é usado um processo filho/subshell, fica mais lento!
Seria melhor usar uma chamada como se fosse biblioteca mesmo, exemplo:

#!/usr/bin/env bash
#===BIBLIOTECA====
. /home/slackjeff/remover.sh # Não abre subshell
. /home/slackjeff/atualizar.sh # Não abre subshell
./home/slackjeff/lalala.sh # Abre subshell, mais lento!



Se vc exemplificar sem explicar fica confuso pra mim ..

a diferença entre lento e não lento é só 1 espaço depois do ponto ????
isso influi ??? ( #!/usr/bin/env bash )

outra coisa ... a principio não rola de fazer tipo biblioteca, pois esses script funcionam só sacou ... o grosso é um script de automação de pós instalação, então por exemplo ele chama o script "Instala_firefox.sh" por exemplo ... aí o firefox será instalado, mas o script "Instala_firefox.sh", não tem só o comando de instalar, ele tem vários IFS ( por exemplo ) que detectam se é a 1ª instalaçao, se já foi baixado, tem a parte da interatividade , que me pergunta se quer "instalar ou remover", manter ou não as configurações do usuário ... emfim ... ele é um script ( como 90% deles ) autônomo .

Então a maioria dos scripts eu só chamo no ponto onde vai ser necessário.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Quando chamamos ./Script.sh esse ./ é um nick/alias para o shell padrão do seu sistema fim...
O . ou source chama um script no mesmo processo, são diferentes do primeiro exemplo acima onde se usa o ./script.sh...
. Script.sh #Chama um script/biblioteca no mesmo processo
source Script.sh # Alias do . chama o script/biblioteca no mesmo processo.

Então no caso acho que seria melhor você por esse seu script todo em uma função, chamar como uma biblioteca e fazer a chamada da função quando necessaria que executar um segundo script dentro do principal! alem de mais lento nao fica profissa...
Exemplo de uma biblioteca.




# BIBLIOTECA/Função atualizar mirrors do sistema.
# Nota, não há necessidade de usar shebang!
# essa biblioteca sera salva como atualizar_repo.sh

function atualizar_repositorio()
{
printf "Olá, vamos atualizar sua lista de repositorio\n"
apt update
return 0
}



#!/bin/bash
# Programa principal.
#======BIBLIOTECA============|
# Chamada da biblioteca para atualizar repositorio
# está biblioteca será carregada juntamente deste programa
# não abrindo uma subshell/subprocesso.
. /DIRETORIO/DA/BIBLIOTECA/atualizar_repo.sh

# fazendo alguma conferencia se usuario é root...
# se é vamos chamar a funcão para atualizar o repositorio.
if [ "$UID" = "0" ]; then
atualizar_repositorio # Chamada da função/biblioteca
else
printf "Parece que você não está como root!\nSó lamento...\n"
exit 1
fi


Assim sera mais rapido que criar um script e chamar com ./script.sh ou bash script.sh
Entendeu?

THE MAGIC SHELL PROGRAMMER.

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
http://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha

Meu PODCAST:
http://podcast.slackjeff.com.br/







10. Re: Script gigante ou vários script's [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 17:36h

slackjeff escreveu:
Quando chamamos ./Script.sh esse ./ é um nick/alias para o shell padrão do seu sistema fim...
O . ou source chama um script no mesmo processo, são diferentes do primeiro exemplo acima onde se usa o ./script.sh...
. Script.sh #Chama um script/biblioteca no mesmo processo
source Script.sh # Alias do . chama o script/biblioteca no mesmo processo.


Bicho .. kkkkkkkkk ... as vezes eu acho que vc explicam as paradas de sacanagem ... kkkkkkkkkk ... só responde pra mim velho ... a diferença ( na grafia ) entre em outro é 1 ( um ) "espaço" depois do ponto ??? só sim ou não me sana a dúvida ... kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

./script.sh # lento e tudo junto
. /script.sh # não lento e um espaço depois do ponto


slackjeff escreveu:
Assim sera mais rapido que criar um script e chamar com ./script.sh ou bash script.sh
Entendeu?


não mesmo ... olha só ... se eu fizer como vc acha que fica melhor ... eu faço o script.sh com função e chamo no script principal ... blz ... mas como eu vou executar o script.sh de forma autônoma quando eu precisar só dele ??? ..

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



11. Re: Script gigante ou vários script's [RESOLVIDO]

Slackjeff
slackjeff

(usa Slackware)

Enviado em 04/07/2018 - 18:01h

Sacanagem por que? kkkk
Tem que matar a cobra e mostrar o pau se não o cara nao entende porr* :p

É ai complica, se precisar usar ele individual não vai rolar muito bem já que está dentro de uma função.
Bom então faz a chamada como se fosse um script mesmo ./nomedoscript ou shell nomedoscript...
Se é melhor para você, isso que importa!


THE MAGIC SHELL PROGRAMMER.

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
http://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha

Meu PODCAST:
http://podcast.slackjeff.com.br/







12. Re: Script gigante ou vários script's [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 04/07/2018 - 18:41h

slackjeff escreveu:
É ai complica, se precisar usar ele individual não vai rolar muito bem já que está dentro de uma função.
Bom então faz a chamada como se fosse um script mesmo ./nomedoscript ou shell nomedoscript...
Se é melhor para você, isso que importa!



então .. essa parte aí está fora de questão mesmo ... senão eu teria que duplicar os scripts ... não vinga né ?!?!?

mas o que eu queria saber mesmo já tá safo ... valew ... !!!

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts