É possível executar só uma parte de um Script?

Pessoal, gostaria de saber se alguém conhece alum editor (ou qualquer outra ferramenta) que permita executar só uma parte de um Script? Eu estou lidando com um script um pouco longo, e às vezes faço uma edição em uma linha perto do final, daí se eu quero ver como o código reagiu, preciso rodar o Script e esperar chegar até o fim… haveria alguma maneira de rodar só aquela parte que eu acabei de editar?

Desculpe se isso parecer óbvio, mas eu desconheço e minhas pesquisas sobre não trouxeram resultados, por isso perguntei aqui.
Ficarei grato por quem souber e ajudar :smiley:

1 curtida

Bom, eu desconheço formas de fazer isso, mas, pensei em algo que eu tentaria…
Já pensou em fazer uma cópia do Script e remover desta cópia todo o código mantendo apenas a parte que você deseja executar???

2 curtidas

Olá!

Eu costumo me deparar com este impasse, a solução que uso:

  • Pegar o problema e criar uma solução em outro arquivo, mas, pensando em como adaptar para o script principal.
  • Ou também, separo o script por funções, ai eu só chamo, as que precisar.

Uma dica: procure utilizar loops e se o shell for compátivel arrays, para não ficar repetindo códigos, vejo muitos scripts em shell onde 80% do script é códigos repetidos, só muda uns parâmetros…

Lembre que: se a lógica for boa, você poderá adaptar em vários senários.

Espero ter lhe ajudado de alguma forma, até! :+1:

2 curtidas

Sim e não

Se você “seguimentar” seu Script em funções onde cada função responde um trecho de código, não só é possível como é fácil, considere o seguinte script:

#!/usr/bin/env bash

echo bloco 1
echo bloco 2
echo bloco 3
echo bloco 4

Cada echo representa um trecho do script, se você usar a metodologia “escopo-processamento-conclusão” você poderia reestruturar ele assim:

#!/usr/bin/env bash

# inicie as variáveis globais e o 
# pré processamento aqui
# isso inclui a declaração de 
# funções auxiliares também 

#-----------------------------------

function bloco_1(){
  echo coloque as coisas do bloco1
}

function bloco_2(){
  echo coloque as coisas do bloco2
}

function bloco_3(){
  echo coloque as coisas do bloco3
}

function bloco_4(){
  echo coloque as coisas do bloco4
}

No final basta chamar apenas a função desejada, por exemplo se você quer o 3o bloco:

bloco_3

Pra fechar o script basta chamar os blocos em ordem:

bloco_1
bloco_2
bloco_3
bloco_4
3 curtidas

Uma outra abordagem é usar sed+pipeline+sh assim você executa literalmente o trecho que você deseja:

sed -n "<linha início>, <linha final>p" script.sh | bash

Por exemplo se você quer testar da linha 22 até a linha 26:

sed -n "22, 26p" script.sh | bash

Só que isso só vai ser evetivo se antes você rodar:

. ./script.sh 

Antes (isso vai rodar o seu script todo)

Nesse caso não é necessário reestruturar o script

3 curtidas

É possível, usando as ideias já citadas, por exemplo. Porém, o resultado pode não ser o esperado pois executando apenas um trecho do script os valores das variáveis naquele momento poderão não serem os mesmos de quando executado o script completo. Por exemplo, vai dar problema se tentar executar o bloco_3 sem executar o bloco_2 e o bloco_3 processar alguma saída do bloco_2.

Dá para contornar isso se organizar bem as coisas, tentando deixar cada bloco independente do outro, em termos dos valores das variáveis, e se basear apenas nos estados dos arquivos/diretórios. Ou criar um “bloco_2_fake” apenas para setar as variáveis manualmente para poder continuar o script. Basta ter um pouco de cuidado, entender bem o que o script está fazendo e usar as dicas já citadas.

3 curtidas

Muito obrigado por todas as respostas, foram muito úteis!! :relaxed:

Eu coloco um exit onde quero parar a execução ou então um break se for dentro de um loop e quero que saia do loop

2 curtidas

Não tem solução de fato mas diversos workarounds, cada um mais apropriado a um objetivo.

Por exemplo,uma linha no final tende a depender da execução que a precede. Já não seria “uma coisa só” pra observar

Particularmente são todas boas idéias mas a única aplicável ao meu dia-a-dia é a última (exits)

Vejo pessoas falando em funções quando o ideal talvez fosse modularisação.Isso não exist por “scripting” ser inormalmente definido geralmente cmo “linguagem automatizadora de rotinas como os batches, ou que são scriptiny languages, linguagens, pelo menos metade formadas pela userland/shell”

Uma sugestão? Modularizar “na marra”: scr1.sh, scr2,sh, scr.sh… e depois um único scr.sh usando `source scrn.sh) pra rodar o módulo especificadp.

Fazendo desse jeito vai criar um subshell e retornar valor mesmo não sendo uma função.

se a lógica for boa, você poderá adaptar em vários senários.
Algoritmos são language-agnostic, embora uma turing-machine seja um exemplo inviável.

Eu tenho meus “métodos” pra me organizar e não me arrependo. Queria levar essas facilidade a ouraws pessoas.
Não modele o que se apregoa e sim o que for adequado ao problema.

Gotos são tão passíveis de manutenção se os responsáveis forem qualificados e CS não é vender laranja na feira. Passou da hora de largar “facilidade” como abstrações, Matemáticos nãotem escolha e conseguem. Nós também;

Java é um retumbante fracasso usurpado pelo JS

JS e outras coisas foram longe demais onte gopher bastaria

Quem ligra pra design é arquiteto.Cientistas ligam pra ciência,não pro contraste.

Assembly,C e C++. Sem choro,

Podem me jugar à vontade,eu só concordo com as idéias.Não as inventei.

P.S.: Elisista é quem se acha especial.EU acho que todos aqui são iguais portanto se eu e outros podemos,todos podem

Pelo meu histórico acadêmico tenho uma dívida moral pra pagar

Se o dio permitir, passo a publicar conteudo livre, Não esperem a mesma qualidade que tive mas farei o impossível;

Eu vislumbro crescimento. Não esperaria o “LInux perfeito” pra sempre mesmo

Cada grupo tem sua maneira de fazer as coisas. *NIX não foi feito pra isso e flexibilizar é querer enfiar pino quadrado em buraco redondo

@Dio Se você apenas me autorizar, eu posso tentar mesmo que fracasse, mostrar aos seus users que eles não são inferiores a nada nem a ninguém, e que podem fazer as coisas com o mindset apropriado.

Sistema ou usuário: só um realmente manda,

E eu não gravo vídeos pra irritar os que se arriscam: meu objetivo PRIMÁRIO é acabar com o medo e os tabus

Só que o mundo não é justo. Enquanto meu Orientador é alemão de renome internacional, os users daqui nem tem orientador. Nem professor, nem nada

Vamos logo encarar a realidade e nos conformarmos com mudanas da ordem Debian x Gentoo, não cobrar uma cópia do Windows como andou sendo o tema aqui

Bom, fico feliz que achou uma que seja aplicável para o seu dia a dia.

“Gotos”? Está se referindo a mesma funcionalidade que o Batch possuí? Porque .sh não pode ser. E pelo que pesquisei gotos no dicio de português, não faz muito sentido a colocação…

Desculpe mas, não entendo muito sobre a gramática do português brasileiro, faz um tempo que estou rodeado apenas de Inglês. Ficou meio complicado entender o motivo da sua resposta e se todo o conteúdo da mesma foi referido ao meu post.

Mesmo não sendo um desenvolvedor Java, consigo compreender que Java não foi um grande fracasso.
Diversos avanços em varios setores, por exemplo de exploração espacial, e muitos outros setores e tecnologias utilizaram/utilizam o Java e tiveram/tem papeis importantes para nós chegarmos aonde estamos hoje.

Qual o motivo desta afirmação adicional? Se levando em conta que, eu e os amigos que responderam antes estavam querendo ajudar com o que sabiam sobre o assunto. E não se achar especial… Contudo, entendo que possa está dando a sua opinião, e por isso não irie julga-lo.

1 curtida

Meio arrogante está frase mas, ok…

O restante da frase não iria comentar mas, me recorda as frase utilizadas por coach… Pretende fazer um tipo de coaching digital? Acharia eu que é um scam mas, você não pediu para clicar em nada e não pediu dinheiro então fiquei confuso… :no_mouth:

1 curtida

Claro, você pode compartilhar o que quiser por aqui brother, fique à vontade, desde que o material esteja de acordo com as regras, de boas. :slight_smile:

1 curtida

Cara, para quem quer ajudar os outros e compartilhar o conhecimento adquirido, você começou bem mal. Como o próprio título do blog diz: “Liberdade de conhecimento”. Para ajudar não é preciso pedir autorização, basta entrar nos posts e responder correta e educadamente. Abra a lista de tópicos recentes e você verá que existem vários sem respostas. Se puder contribuir com algum tutorial, ótimo. Mas se o objetivo for dar lição de moral e pregar a verdade absoluta, acho que você não terá muito sucesso.

Obs.: Eu posso dizer que tenho uma boa formação também, mas não uso esse argumento para defender minhas postagens. Fica a dica!

3 curtidas

O academicista aloprou lol

Desculpa, gente, não aguento :sweat_smile:

2 curtidas

Nem sempre, dada a natureza do bash, divisão um múltiplos scripts serve pra criar bibliotecas de funções (mal comparando, como os arquivos .so.dll), ou seja, se você tem múltiplos scripts com funções/trechos em comum, ao invés de reescrever você cria um arquivo common.sh por exemplo e o chama, por exemplo se você tem essa função:

function soma(){
  echo ${1}+${2} | bc
}

E essa função é usada por vários scripts, você cria uma biblioteca separada e os chama:

. ${HERE}/aritimetica.sh

Essa é a lógica do source compartilhar código

Criar vários script com o trechos não comuns de código especialmente sem funções, é um bom jeito de simplesmente rasgar a filosofia KISS e se perder no código, tornando a correção de um eventual erro virtualmente impossível dependendo do caso

Na verdade fazer isso carrega o script na shell atual

Essa metodologia pode funcionar bem em scripts simples como post install, mas um script que trata de vários cenários já fica inviável

Tudo é passível de manutenção, mas convenhamos, deixar tudo simples dá bem menos dor de cabeça

E sim, eles não só tem escolha como sempre que possível, eles vão pro lado válido mais fácil

Ciência sem organização vira falácia, não atoa se tem o que se chama de pseudociência

Olha, não sei quem te disse isso, mas a filosofia do Unix é justamente prover coisas do jeito mais simples e flexível possível, as distros seguem isso? Aí é ponto de discussão, mas o *NIX por definição, é flexivél, uma prova disso é o plumbing, quer algo mais versátil e flexivel que isso?

Apesar de programar em C++ eu discordo, quanto mais “humana” for a linguagem melhor

Isso é apelo a autoridade, até que a pessoa prove, o mentor pode ser o próprio Torvalds que a pessoa potencialmente pode não entender absolutamente nada sobre Linux

3 curtidas