Fazer o kit de boas-vindas funcionar corretamente

LinuxBeginner
Pratique Agora

Introdução

OPEN CIRCLE prepara uma tarde de artes comunitárias. O kit mostra o programa completo com Chloé Martín, 林雨, 佐藤葵 e João Silva. O exemplo correto funciona, mas a nova exportação não.

Você corrigirá uma entrega separada, preservando os originais. Basta familiaridade básica com o terminal. Aprenderá a distinguir permissão, primeira linha e codificação. O leitor está pronto; você não escreverá Python nem um conversor geral.

Use Terminal no navegador. Os dados e as saídas mantêm seu idioma original em todas as traduções.

Corrigir o iniciador sem alterar os originais

Nesta etapa, você comparará um kit funcional com uma exportação e criará um iniciador executável diretamente. Use Terminal.

Leia primeiro o resultado real

cd muda o diretório de trabalho. ./ executa um arquivo relativo a ele; a barra orienta o shell a usar esse caminho em vez de buscar nomes de comandos. Comece com o exemplo fornecido:

cd /home/labex/project/event
./sample/start.sh
OPEN CIRCLE | Afternoon

14:00 — Welcome / Chloé Martín
14:30 — 纸艺工坊 / 林雨
15:15 — 音の庭 / 佐藤葵
16:00 — Café & questions / João Silva

Leia todas as linhas, incluindo a separação em branco. São os bytes realmente decodificados pelo leitor fornecido, não uma imagem ou um rótulo de sucesso. cat imprime texto. Leia o recibo de exportação antes de escolher a conversão:

cat source/export-receipt.txt

O recibo declara UTF-8 com finais CRLF para start.sh e UTF-16-LE com BOM para programme.txt. Os demais arquivos já são UTF-8 com LF. A extensão não determina a codificação.

Separe permissão e entrada do interpretador

ls -l mostra permissões; x indica execução. A primeira linha de um script, o shebang, começa com #! e identifica o interpretador. Executar diretamente exige uma entrada válida e permissão. Tente o iniciador exportado; esta falha é intencional:

ls -l source/start.sh
./source/start.sh

Espere permission denied. Alterar texto não concede permissão. Já bash file pede ao Bash que leia o arquivo, contornando a execução direta e seu shebang. Este script específico tem um comentário após o comando; o CR final fica dentro dele. Experimente:

bash source/start.sh

Espere Cannot read programme.txt e um erro de decodificação UTF-8. É outra falha: o leitor foi alcançado, mas não conseguiu decodificar os dados. Chamar Bash explicitamente fornece evidência, sem provar que a execução direta está pronta.

cp -a copia o conteúdo de um diretório preservando os modos dos arquivos. /. significa seu conteúdo, incluindo arquivos ocultos. Crie a entrega sem alterar source/ e sample/. mkdir -p cria o diretório e os pais ausentes; também funciona se ele já existe. chmod u+x adiciona execução ao proprietário (u), sem mudar as outras permissões:

mkdir -p delivery
cp -a source/. delivery/
chmod u+x delivery/start.sh
./delivery/start.sh

A execução direta ainda falha, por exemplo com bad interpreter: /bin/bash^M: no such file or directory. Alguns shells mostram cannot execute: required file not found. O script existe; o problema é o byte CR no fim do caminho do interpretador. Não continue repetindo chmod.

Observe os bytes e corrija apenas os finais do script

LF é o byte 0a; CRLF é 0d 0a. file descreve formatos a partir de padrões de bytes. od -An -tx1 -N16 imprime os primeiros 16 bytes em hexadecimal, sem endereços. Combine recibo e bytes; file não identifica codificações de forma infalível:

file source/start.sh source/programme.txt
od -An -tx1 -N16 source/start.sh

O shebang termina em 0d 0a. Finais de linha e codificação são propriedades diferentes: o script já é UTF-8. Aplicativos Linux conseguem ler CRLF; esta falha afeta o caminho do interpretador na execução direta.

sed 's/\r$//' remove apenas um CR no final da linha. Aspas simples preservam a expressão; $ significa fim de linha. > grava a saída padrão em outro arquivo, substituindo-o ao repetir. Nunca redirecione para a entrada: o shell a esvaziaria antes de sed ler. && executa o comando seguinte somente se o anterior teve sucesso. Depois mv renomeia o temporário completo:

sed 's/\r$//' source/start.sh > delivery/start.tmp && mv delivery/start.tmp delivery/start.sh
chmod u+x delivery/start.sh
od -An -tx1 -N16 delivery/start.sh
./delivery/start.sh

O shebang agora termina em 0a. O último comando chega a Cannot read programme.txt, como o Bash explícito. Isso é progresso até os dados, não a conclusão do kit. Se errar, repita a conversão a partir de source/start.sh e restaure a execução; não edite o original.

Converter o programa e usar a entrega independente

Nesta etapa, você decodificará a origem UTF-16 declarada, preservará todo o texto e usará a entrega a partir de outro diretório. Continue em Terminal, em /home/labex/project/event.

Use as evidências de codificação

Uma codificação de caracteres associa caracteres a bytes. UTF-8 e UTF-16 representam os mesmos nomes com bytes diferentes. Um BOM no início de UTF-16 informa a ordem: ff fe significa little endian; fe ff, big endian. Ambos são UTF-16. Aqui o BOM é evidência útil, não um prefixo sempre prejudicial.

od -An -tx1 -N16 source/programme.txt

O início ff fe corresponde a UTF-16-LE no recibo. O contrato documentado do leitor exige UTF-8 sem BOM. Ele aceita CRLF nos dados textuais, mas não decodifica estes bytes UTF-16 como UTF-8. Remover CR ou trocar a extensão não faz essa decodificação.

iconv -f UTF-16 -t UTF-8 decodifica UTF-16 com BOM e codifica como UTF-8. -f indica a origem, -t o destino; UTF-16 usa o BOM para selecionar a ordem. Salve em um temporário e adote o resultado só após sucesso:

iconv -f UTF-16 -t UTF-8 source/programme.txt > delivery/programme.tmp && mv delivery/programme.tmp delivery/programme.txt
file delivery/programme.txt
od -An -tx1 -N16 delivery/programme.txt
cat delivery/programme.txt

Os primeiros bytes agora são os do título UTF-8, não ff fe, fe ff nem o BOM UTF-8 ef bb bf. Compare cada nome com o exemplo: excluir caracteres não ASCII perderia conteúdo mesmo que o arquivo pudesse ser decodificado.

Se iconv falhar, a saída pode estar incompleta. && impede adotar esse arquivo parcial. Confira a codificação declarada e repita da origem intacta; não use -c nem //IGNORE para descartar caracteres silenciosamente. A lição trata codificações declaradas e intactas, não adivinhação ou reparo de exportações corrompidas.

Preserve o que já funciona

about.sh e door-sign.txt já estão corretos e não precisam de conversão. cmp compara bytes, não imprime nada e retorna sucesso quando são iguais. As duas comparações devem ficar silenciosas:

cmp source/about.sh delivery/about.sh
cmp source/door-sign.txt delivery/door-sign.txt
./delivery/about.sh
cat delivery/door-sign.txt

Espere a descrição de artes comunitárias e Bienvenue · 欢迎 · ようこそ. Converter responde a evidências e a um contrato de entrada; não é obrigatório para todos os arquivos.

Entregue e execute o kit de verdade

O iniciador encontra reader.py em relação à própria localização; o leitor faz o mesmo com programme.txt. Mude para um diretório sem relação e use o caminho absoluto. Uma entrega utilizável não depende do diretório do autor nem de um desvio por bash explícito:

cd /tmp
/home/labex/project/event/delivery/start.sh

Espere as quatro entradas completas da tarde, na ordem original e com a separação em branco. Você usou os arquivos realmente entregues. Compare Chloé Martín, 林雨, 佐藤葵 e João Silva; saída zero não prova, por si só, que o texto foi preservado.

Volte ao projeto:

cd /home/labex/project/event

Para repetir, regenere o arquivo afetado a partir de source/. Não passe a saída UTF-8 já convertida para iconv -f UTF-16: isso declara a origem errada. Preserve arquivos funcionais e repita o lançamento direto após mudanças. Outros aplicativos podem aceitar outras codificações ou BOM; estes requisitos pertencem ao contrato deste kit.

Resumo

Você separou permissão direta, finais do shebang e codificação dos dados. Entregou e executou todo o programa UTF-8 preservando nomes, ordem e arquivos corretos. O desafio independente noturno aplica os mesmos métodos com outras evidências de origem.