From db6da62de238e9e39ee6862414d93af9d052f4c7 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Wed, 22 Sep 2021 12:37:49 -0300 Subject: [PATCH] Shell por dia: Error chain --- content/books/shell-por-dia/_index.md | 1 + .../books/shell-por-dia/entradas-e-saidas.md | 2 +- content/books/shell-por-dia/error-chain.md | 46 +++++++++++++++++++ content/books/shell-por-dia/introducao.md | 2 +- content/books/shell-por-dia/pipes.md | 2 +- .../books/shell-por-dia/redirecionamento.md | 2 +- content/books/shell-por-dia/subcomandos.md | 2 +- 7 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 content/books/shell-por-dia/error-chain.md diff --git a/content/books/shell-por-dia/_index.md b/content/books/shell-por-dia/_index.md index da38e44..fdfc70d 100644 --- a/content/books/shell-por-dia/_index.md +++ b/content/books/shell-por-dia/_index.md @@ -13,3 +13,4 @@ hide_content = false * [Pipes](@./pipes.md) * [Shells](@./shells.md) * [Subcomandos](@./subcomandos.md) +* [Error chain](@./error-chain.md) diff --git a/content/books/shell-por-dia/entradas-e-saidas.md b/content/books/shell-por-dia/entradas-e-saidas.md index 3d0f720..14101aa 100644 --- a/content/books/shell-por-dia/entradas-e-saidas.md +++ b/content/books/shell-por-dia/entradas-e-saidas.md @@ -3,7 +3,7 @@ title = "Um Shell Por Dia: Entradas e Saídas" date = 2021-09-13 [taxonomies] -tags = ["por dia", "shell", "entradas", "saídas", "stdin", "stdout", "stderr"] +tags = ["books", "por dia", "shell", "entradas", "saídas", "stdin", "stdout", "stderr"] +++ Antes de sairmos vendo comandos e coisas do tipo, vamos começar com um conceito diff --git a/content/books/shell-por-dia/error-chain.md b/content/books/shell-por-dia/error-chain.md new file mode 100644 index 0000000..bbeca74 --- /dev/null +++ b/content/books/shell-por-dia/error-chain.md @@ -0,0 +1,46 @@ ++++ +title = "Um Shell por Dia: Error Chain" +date = 2021-09-22 + +[taxonomies] +tags = ["books", "por dia", "shell", "erros"] ++++ + +Quando um comando é executado, ele "emite" um código para o shell indicando o +resultado de sua execução. Por exemplo, se você rodar `ls` e estiver no Bash, +você pode ver o resultado do comando com `echo $?` -- que será 0, já que o ls +conseguiu executar (a não ser que você esteja num diretório que não tem +permissão de listar o conteúdo, mas enfim). + +{% note() %} +Para quem programa/programou em C, deve lembrar das constantes `EXIT_SUCCESS` e +`EXIT_FAILURE`, que ficavam no final do `main()`. Bom, SUCCESS tem definido o +valor 0 e FAILURE 1, e se você quiser, pode brincar de criar uma aplicação que +retorne os dois valores e verificar o resultado com o `echo $?`. +{% end %} + +Algumas aplicações utilizam vários códigos diferentes para indicar que a +execução foi terminada por um erro específico. + +Mas para encadeamento de erros, só precisamos saber que 0 é "tudo terminou +certo" e qualquer coisa diferente disso é "deu erro". + +Para encadear comandos, podemos usar `&&` e `||`. + +`&&` indica "se o comando anterior terminar em sucesso, execute o próximo +comando". Por exemplo `ls && cp arq1 arq2` indica que, se o `ls` terminar com +sucesso, então o comando `cp` (que copia arquivos) será executado; se, por algum +motivo, o `ls` falhasse, o comando `cp` não seria executado. + +`||` indica "se o comando anterior falhar, execute o próximo comando". Assim, +`ls || cp arq1 arq2` faria com que o `cp` somente fosse executado se o `ls` +falhasse. + +E vários comandos podem ser encadeados dessa forma: + +``` +ls && cp arq1 dir/arq2 || mkdir dir +``` + +Irá fazer o `ls`; se ele não falhar, executa o `cp`; se o `cp` falhar, cria o +diretório. diff --git a/content/books/shell-por-dia/introducao.md b/content/books/shell-por-dia/introducao.md index 2ca477e..6bafb14 100644 --- a/content/books/shell-por-dia/introducao.md +++ b/content/books/shell-por-dia/introducao.md @@ -3,7 +3,7 @@ title = "Um Shell Por Dia: Introdução" date = 2021-09-13 [taxonomies] -tags = ["por dia", "shell"] +tags = ["book", "por dia", "shell"] +++ Assim como eu já tinha feito com "Um Python Por Dia" e "Um Vim Por Dia", eu diff --git a/content/books/shell-por-dia/pipes.md b/content/books/shell-por-dia/pipes.md index a8f283a..c8e357f 100644 --- a/content/books/shell-por-dia/pipes.md +++ b/content/books/shell-por-dia/pipes.md @@ -3,7 +3,7 @@ title = "Um Shell Por Dia: Pipes" date = 2021-09-14 [taxonomies] -tags = ["por dia", "shell", "entradas", "saídas", "stdin", "stdout"] +tags = ["book", "por dia", "shell", "entradas", "saídas", "stdin", "stdout"] +++ Ainda sobre entradas e saídas, imagine que você queira usar a saída de um diff --git a/content/books/shell-por-dia/redirecionamento.md b/content/books/shell-por-dia/redirecionamento.md index 98ee417..54455ba 100644 --- a/content/books/shell-por-dia/redirecionamento.md +++ b/content/books/shell-por-dia/redirecionamento.md @@ -3,7 +3,7 @@ title = "Um Shell Por Dia: Redirecionamento" date = 2021-09-14 [taxonomies] -tags = ["por dia", "shell", "redirecionamento", "stdin", "stdout", "stderr"] +tags = ["book", "por dia", "shell", "redirecionamento", "stdin", "stdout", "stderr"] +++ Agora que conhecemos os descritores de entrada, saída e erro, vamos ver como diff --git a/content/books/shell-por-dia/subcomandos.md b/content/books/shell-por-dia/subcomandos.md index b2edf03..bd8caca 100644 --- a/content/books/shell-por-dia/subcomandos.md +++ b/content/books/shell-por-dia/subcomandos.md @@ -3,7 +3,7 @@ title = "Um Shell por Dia: Sub comandos" date = 2021-09-21 [taxonomies] -tags = ["books", "shell por dia", "subcomandos"] +tags = ["books", "por dia", "shell", "subcomandos"] +++ Algumas vezes queremos que parte do comando que será executado seja calculado