Pular para o conteúdo principal

Questão de Programação — Shell script — FGV 2024

ProgramaçãoShell script
Código
fg079879
Banca
FGV
Órgão
DATAPREV
Ano
2024
Nível
Superior
Cargo
Analista de Processamento
Considere os seguintes trechos de código, um em PowerShell e outro em Shell Script (Bash), que possuem a mesma finalidade:Q51.png 370×223Ambos os códigos mostrados realizam a cópia de arquivos com a extensão .txt de uma pasta de origem para uma pasta de backup.Considerando o comportamento esperado de cada script, assinale a opção correta.
  1. AO código PowerShell pode gerar um erro se a pasta de backup não existir, enquanto o script Bash irá criar a pasta automaticamente.
  2. BO código em PowerShell pode ser executado diretamente no Windows sem necessidade de software adicional, enquanto o código em Bash requer a instalação de um ambiente Unix no Windows.
  3. CAmbos os scripts estão incorretos, pois os comandos CopyItem e cp não realizam cópia recursiva.
  4. DO código Bash é mais seguro que o PowerShell, pois impede o sobrescrita de arquivos no destino sem confirmação.
  5. EO código PowerShell possui melhor desempenho que o Bash, pois é uma linguagem compilada.
Revelar gabarito e comentário

GabaritoB — O código em PowerShell pode ser executado diretamente no Windows sem necessidade de software adicional, enquanto o código em Bash requer a instalação de um ambiente Unix no Windows.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Shell Script vs PowerShell: cópia de arquivos e portabilidade

Gabarito: letra B. O código em PowerShell pode ser executado diretamente no Windows, pois o PowerShell é um componente nativo do sistema operacional desde o Windows 7/Server 2008, enquanto o Bash é o interpretador padrão de sistemas Unix/Linux e, no Windows, exige a instalação de um ambiente adicional (como WSL, Git Bash ou Cygwin). As demais alternativas apresentam erros conceituais sobre o comportamento dos comandos Copy-Item e cp, sobre a criação de pastas e sobre a natureza das linguagens.

A questão compara dois scripts com a mesma finalidade: copiar arquivos .txt de uma pasta de origem para uma pasta de backup. O primeiro usa o cmdlet Copy-Item do PowerShell; o segundo usa o comando cp do Bash. A banca não quer que você decore a sintaxe exata de cada um, mas que compreenda as diferenças de ambiente, comportamento padrão e portabilidade entre as duas abordagens.

Vamos entender cada conceito envolvido. O PowerShell é um shell e linguagem de script desenvolvido pela Microsoft, integrado ao Windows. Ele é baseado no .NET Framework e seus comandos são chamados de cmdlets (como Copy-Item). O Bash (Bourne Again Shell) é o shell padrão da maioria das distribuições Linux e também está presente no macOS. No Windows, o Bash não é nativo — para executá-lo, é necessário instalar um ambiente Unix, como o Subsistema Windows para Linux (WSL), Git Bash ou Cygwin.

Sobre o comportamento dos comandos de cópia: tanto Copy-Item quanto cp são capazes de copiar arquivos e, com as opções adequadas, diretórios recursivamente. No PowerShell, Copy-Item -Recurse copia pastas e seu conteúdo; no Bash, cp -r faz o mesmo. A afirmação de que "não realizam cópia recursiva" é falsa, pois ambos possuem essa capacidade.

Quanto à criação de pastas: nem o Copy-Item nem o cp criam automaticamente o diretório de destino se ele não existir. No PowerShell, é necessário usar New-Item -ItemType Directory ou mkdir antes; no Bash, usa-se mkdir -p. Portanto, ambos os scripts podem falhar se a pasta de backup não existir, a menos que o código inclua explicitamente a criação do diretório.

Sobre segurança e sobrescrita: por padrão, tanto Copy-Item quanto cp sobrescrevem arquivos existentes no destino sem pedir confirmação. Para evitar a sobrescrita, seria necessário usar parâmetros como -NoClobber no PowerShell ou a opção -n/--no-clobber no Bash. Nenhum dos dois é intrinsecamente "mais seguro" nesse aspecto.

Por fim, sobre desempenho: o PowerShell é uma linguagem interpretada (baseada no .NET), assim como o Bash é interpretado. Nenhum dos dois é compilado. A afirmação de que o PowerShell é compilado é incorreta.

Agora, vamos analisar cada alternativa em detalhe.

Critério

PowerShell

Bash (Shell Script)

Execução nativa no Windows

Sim (componente nativo desde Windows 7/Server 2008)

Não (exige WSL, Git Bash ou Cygwin)

Criação automática da pasta de destino

Não (exige New-Item/mkdir prévio)

Não (exige mkdir -p prévio)

Cópia recursiva

Suportada (Copy-Item -Recurse)

Suportada (cp -r)

Sobrescrita sem confirmação (padrão)

Sim (sobrescreve; para evitar, usar -NoClobber)

Sim (sobrescreve; para evitar, usar -n/--no-clobber)

Natureza da linguagem

Interpretada (baseada no .NET)

Interpretada

Alternativa A — ❌ Incorreta

Afirma que o PowerShell pode gerar erro se a pasta de backup não existir, enquanto o Bash criaria a pasta automaticamente. Isso está errado: o comando cp do Bash não cria diretórios de destino automaticamente. Se a pasta não existir, o cp retorna um erro ("No such file or directory"). Para criar a pasta, seria necessário usar mkdir -p antes do cp. Portanto, ambos os scripts exigem que a pasta de destino exista ou que o código a crie explicitamente.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta é a alternativa correta. O PowerShell é um componente nativo do Windows desde o Windows 7 e o Windows Server 2008 R2, portanto, um script .ps1 pode ser executado diretamente no Windows sem a necessidade de instalar software adicional (apenas é preciso ajustar a política de execução, se necessário). Já o Bash é o shell padrão de sistemas Unix/Linux; no Windows, para executar scripts .sh, é necessário instalar um ambiente Unix, como o WSL (Subsistema Windows para Linux), Git Bash ou Cygwin. Essa é a diferença central de portabilidade entre as duas linguagens.

Alternativa C — ❌ Incorreta

Afirma que ambos os scripts estão incorretos porque Copy-Item e cp não realizam cópia recursiva. Isso é falso: ambos os comandos suportam cópia recursiva. No PowerShell, o parâmetro -Recurse permite copiar diretórios e seu conteúdo; no Bash, a opção -r ou -R faz o mesmo. Além disso, a questão afirma que os scripts copiam apenas arquivos .txt de uma pasta — não há indicação de que seja necessária recursividade para subpastas. A alternativa parte de uma premissa incorreta.

Alternativa D — ❌ Incorreta

Afirma que o Bash é mais seguro que o PowerShell porque impede a sobrescrita de arquivos sem confirmação. Isso é incorreto: por padrão, tanto cp quanto Copy-Item sobrescrevem arquivos existentes no destino sem pedir confirmação. Para evitar a sobrescrita, seria necessário usar opções específicas: -NoClobber no PowerShell ou -n/--no-clobber no Bash. Nenhum dos dois é intrinsecamente mais seguro nesse aspecto; a segurança depende de como o script é escrito.

Alternativa E — ❌ Incorreta

Afirma que o PowerShell tem melhor desempenho que o Bash por ser uma linguagem compilada. Isso é falso: o PowerShell é uma linguagem interpretada, baseada no .NET Framework (o código é compilado em tempo de execução pelo CLR, mas a linguagem em si não é compilada em um executável nativo). O Bash também é interpretado. A afirmação sobre compilação está incorreta, e a relação de desempenho entre as duas linguagens não é uma característica definida pela compilação.

Gabarito: letra B — a única alternativa que apresenta uma afirmação correta sobre a portabilidade do PowerShell e do Bash no Windows.

Link permanente: /questoes/fg079879