Questão de Programação — Linguagens de programação — Avança SP 2024
- Código
- qg078053
- Banca
- Avança SP
- Órgão
- CISBRA - SP
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista em T.I
- APipelines
- Blistas de comandos.
- Ccomandos compostos.
- DComments
- EFeatures
GabaritoC — comandos compostos.
Gabarito: letra C. O texto descreve exatamente os comandos compostos (compound commands) das linguagens de programação shell: construções que começam com uma palavra reservada ou operador de controle e terminam com uma palavra reservada ou operador correspondente, e cujos redirecionamentos se aplicam a todos os comandos internos, salvo substituição explícita. Essa é a definição clássica presente na documentação do Bash (GNU Bash Reference Manual).
Para entender por que a resposta é "comandos compostos", é preciso distinguir os diferentes tipos de construções que o shell reconhece. O shell não executa apenas comandos simples (um comando com seus argumentos); ele também agrupa comandos em estruturas maiores. Essas estruturas são classificadas em: pipelines, listas de comandos e comandos compostos. Cada uma tem uma sintaxe e um comportamento próprios.
Os comandos compostos são blocos que agrupam um ou mais comandos dentro de uma estrutura delimitada por palavras reservadas ou operadores. Exemplos clássicos são: if...then...fi, for...do...done, while...do...done, case...esac, { lista; } (agrupamento) e ( lista ) (subshell). A característica central — e que a questão explora — é que eles começam com uma palavra reservada ou operador de controle (como if, for, {, () e terminam com uma palavra reservada ou operador correspondente (como fi, done, }, )). Além disso, qualquer redirecionamento aplicado ao comando composto como um todo (por exemplo, { cmd1; cmd2; } > arquivo) vale para todos os comandos internos, a menos que um redirecionamento interno o substitua.
Vejamos um exemplo prático para fixar. Considere o comando composto if:
if comando; then
echo "verdadeiro"
else
echo "falso"
fi > saida.txtAqui, o redirecionamento > saida.txt aplica-se a todos os comandos dentro do bloco if (tanto o echo "verdadeiro" quanto o echo "falso"). Se houvesse um redirecionamento interno, como echo "falso" > erro.txt, ele substituiria o redirecionamento externo apenas para aquele comando específico. Essa é exatamente a propriedade descrita no enunciado.
A distinção entre os tipos de construção é o ponto central da questão. Enquanto os pipelines conectam a saída de um comando à entrada de outro com o operador |, e as listas de comandos simplesmente sequenciam comandos com ;, && ou ||, os comandos compostos são blocos estruturados com início e fim bem definidos. É essa estrutura de abertura e fechamento que o texto descreve.
A pegadinha da banca está em confundir o candidato com termos genéricos ou com outras construções do shell. "Pipelines" e "listas de comandos" são construções reais, mas não têm a característica de começar e terminar com palavras reservadas correspondentes — um pipeline é apenas uma sequência de comandos ligados por |, e uma lista é uma sequência separada por ;, &, && ou ||. Já "Comments" e "Features" são termos que não correspondem a nenhuma construção sintática do shell. O termo técnico preciso, que descreve exatamente o comportamento mencionado, é "comandos compostos".
Guarde essa fronteira: comando composto = bloco delimitado por palavras reservadas/operadores de abertura e fechamento, com redirecionamento global aplicável a todos os comandos internos. É exatamente nessa definição que as alternativas se dividem.
Pipelines são construções que conectam a saída padrão de um comando à entrada padrão de outro, usando o operador |. Um pipeline não começa com uma palavra reservada nem termina com uma correspondente — ele é apenas uma sequência de comandos ligados por pipes. A definição do enunciado (início e fim com palavras reservadas, redirecionamento global) não se aplica a pipelines.
Listas de comandos são sequências de um ou mais comandos separados por ;, &, && ou ||. Elas não possuem uma palavra reservada de abertura nem de fechamento — são apenas comandos executados em sequência ou em paralelo. O redirecionamento em uma lista se aplica apenas ao comando ao qual está anexado, não a todos os comandos da lista. Portanto, não corresponde à descrição.
Comandos compostos são exatamente o que o texto descreve: construções que começam com uma palavra reservada ou operador de controle (como if, for, while, case, {, () e terminam com uma palavra reservada ou operador correspondente (como fi, done, esac, }, )). Além disso, os redirecionamentos aplicados ao comando composto se aplicam a todos os comandos internos, a menos que sejam explicitamente substituídos. Essa é a definição canônica presente na documentação do Bash.
Comments (comentários) são linhas que começam com # e são ignoradas pelo shell. Não são construções que agrupam comandos, não têm palavra reservada de abertura/fechamento e não possuem redirecionamentos associados. São apenas anotações no código.
Features é um termo genérico que significa "características" ou "funcionalidades" de uma linguagem. Não é uma construção sintática específica do shell. O enunciado descreve uma estrutura concreta e bem definida, que tem um nome técnico preciso: comandos compostos.
A banca explora a confusão entre os tipos de construção do shell. O candidato pode lembrar de "pipelines" ou "listas de comandos" por serem termos mais comuns, mas a descrição do enunciado — começar e terminar com palavras reservadas, redirecionamento global — aponta exclusivamente para os comandos compostos. Fique atento: pipeline é sobre conectar saída/entrada com |; lista é sobre sequenciar com ;; comando composto é sobre agrupar em um bloco delimitado.
Gabarito: letra C
Link permanente: /questoes/qg078053