Faire fonctionner correctement le kit de bienvenue

LinuxBeginner
Pratiquer maintenant

Introduction

OPEN CIRCLE prépare un après-midi artistique. Le kit affiche le programme complet, avec Chloé Martín, 林雨, 佐藤葵 et João Silva. L’exemple correct fonctionne ; le nouvel export échoue.

Vous réparerez une livraison séparée en préservant les originaux. Une connaissance élémentaire du terminal suffit. Vous distinguerez permissions, première ligne du script et encodage. Le lecteur est fourni : aucun Python ni convertisseur général à écrire.

Utilisez Terminal dans le navigateur. Données et sorties conservent leur langue originale dans toutes les traductions.

Réparer le lanceur sans modifier les originaux

Dans cette étape, comparez un kit fonctionnel à un export et préparez un lanceur directement exécutable. Utilisez Terminal.

Lire d’abord le résultat réel

cd change le répertoire de travail. ./ exécute un fichier relatif à ce répertoire ; la barre indique au shell d’utiliser ce chemin plutôt que de rechercher un nom de commande. Commencez par l’exemple fourni :

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

Lisez chaque ligne, y compris la séparation vide. Il s’agit du texte réellement décodé par le lecteur fourni, pas d’une capture ni d’un indicateur de réussite. cat affiche du texte. Consultez le reçu d’export avant de choisir une conversion :

cat source/export-receipt.txt

Le reçu déclare UTF-8 avec fins CRLF pour start.sh et UTF-16-LE avec BOM pour programme.txt. Les autres fichiers sont déjà en UTF-8 avec LF. L’extension ne permet pas de déterminer l’encodage.

Distinguer permission et entrée de l’interpréteur

ls -l affiche les permissions ; x indique l’exécution. La première ligne du script, le shebang, commence par #! et désigne un interpréteur. L’exécution directe exige une entrée valide et une permission. Essayez le lanceur exporté ; cet échec est volontaire :

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

Attendez-vous à permission denied. Modifier le texte n’accorde aucune permission. bash file demande plutôt à Bash de lire le fichier, en contournant l’exécution directe et son shebang. Ce script précis comporte un commentaire après la commande ; le CR final se trouve donc dans ce commentaire. Essayez :

bash source/start.sh

Attendez-vous à Cannot read programme.txt et à une erreur de décodage UTF-8. Le lecteur a été atteint, mais n’a pas décodé les données. L’appel explicite de Bash fournit un indice ; il ne prouve pas que l’exécution directe fonctionne.

cp -a copie le contenu d’un répertoire en préservant les modes. /. signifie son contenu, fichiers cachés compris. Créez une livraison sans changer source/ ni sample/. mkdir -p crée le répertoire et les parents manquants ; il réussit aussi si le répertoire existe. chmod u+x ajoute l’exécution au propriétaire (u), sans modifier les autres permissions :

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

L’exécution directe échoue encore, avec par exemple bad interpreter: /bin/bash^M: no such file or directory. Certains shells indiquent cannot execute: required file not found. Le script existe : c’est le CR à la fin du chemin de l’interpréteur qui pose problème. Inutile de répéter chmod.

Examiner les octets et corriger uniquement les fins du script

LF correspond à 0a ; CRLF à 0d 0a. file décrit le format d’après les motifs d’octets. od -An -tx1 -N16 affiche les 16 premiers octets en hexadécimal, sans adresses. Croisez reçu et octets ; file n’est pas un détecteur infaillible :

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

Le shebang se termine par 0d 0a. Fins de ligne et encodage sont distincts : le script est déjà UTF-8. Les applications Linux peuvent lire du texte CRLF ; cet échec concerne le chemin de l’interpréteur lors de l’exécution directe.

sed 's/\r$//' supprime seulement un CR en fin de ligne. Les apostrophes protègent l’expression ; $ désigne la fin de ligne. > écrit la sortie standard dans un autre fichier, remplacé lors d’un nouvel essai. Ne redirigez jamais vers l’entrée : le shell la viderait avant sa lecture par sed. && lance la commande suivante seulement si la précédente réussit. mv renomme ensuite le fichier temporaire complet :

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

Le shebang finit maintenant par 0a. La dernière commande atteint Cannot read programme.txt, comme Bash explicite. Vous avez atteint la frontière des données, pas terminé le kit. En cas d’erreur, recommencez depuis source/start.sh et rétablissez l’exécution, sans modifier l’original.

Convertir le programme et utiliser la livraison autonome

Dans cette étape, décodez la source UTF-16 déclarée, conservez tout le texte et utilisez la livraison depuis un autre répertoire. Continuez dans Terminal, à /home/labex/project/event.

Utiliser les preuves d’encodage

Un encodage associe des caractères à des octets. UTF-8 et UTF-16 représentent les mêmes noms avec des octets différents. Le BOM au début d’UTF-16 indique leur ordre : ff fe signifie petit-boutiste ; fe ff, gros-boutiste. Les deux sont UTF-16. Le BOM est ici un indice utile, pas un préfixe toujours nuisible.

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

Le préfixe ff fe correspond à UTF-16-LE dans le reçu. Le contrat du lecteur exige UTF-8 sans BOM. Il accepte CRLF dans le texte, mais ne peut pas décoder ces octets UTF-16 comme UTF-8. Supprimer les CR ou renommer l’extension ne réalise pas ce décodage.

iconv -f UTF-16 -t UTF-8 décode UTF-16 avec BOM puis encode en UTF-8. -f indique la source, -t la cible ; UTF-16 utilise le BOM pour choisir l’ordre. Écrivez d’abord dans un temporaire et ne le promouvez qu’après réussite :

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

Les premiers octets sont désormais ceux du titre UTF-8, ni ff fe, ni fe ff, ni le BOM UTF-8 ef bb bf. Comparez chaque nom à l’exemple : supprimer les caractères non ASCII ferait perdre du contenu même si le fichier restait décodable.

Si iconv échoue, sa sortie peut être partielle. && empêche sa promotion. Vérifiez l’encodage déclaré et repartez de la source intacte ; n’utilisez pas -c ou //IGNORE pour perdre silencieusement des caractères. La leçon traite des encodages déclarés et intacts, pas de deviner ou réparer un export corrompu.

Préserver ce qui fonctionne déjà

about.sh et door-sign.txt sont corrects et ne nécessitent aucune conversion. cmp compare les octets ; des fichiers identiques ne produisent aucun affichage et renvoient une réussite. Les deux comparaisons doivent rester silencieuses :

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

Attendez-vous à la description artistique et à Bienvenue · 欢迎 · ようこそ. Une conversion répond à des preuves et à un contrat d’entrée ; elle ne s’applique pas systématiquement à tout fichier.

Livrer et exécuter réellement le kit

Le lanceur trouve reader.py relativement à sa propre position ; le lecteur fait de même pour programme.txt. Passez dans un répertoire sans rapport et utilisez le chemin absolu. Une livraison utile ne dépend ni du répertoire de l’auteur ni d’un contournement par bash explicite :

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

Retrouvez exactement les quatre entrées de l’après-midi, dans leur ordre et avec la ligne vide. Vous avez exécuté les vrais fichiers livrés. Comparez Chloé Martín, 林雨, 佐藤葵 et João Silva ; un code nul ne prouve pas à lui seul la préservation du texte.

Revenez au projet :

cd /home/labex/project/event

Pour réessayer, régénérez le fichier depuis source/. Ne fournissez pas la sortie UTF-8 déjà convertie à iconv -f UTF-16 : ce serait déclarer une mauvaise source. Gardez les fichiers corrects et relancez directement après toute modification. D’autres applications peuvent accepter d’autres encodages ou BOM ; ces exigences appartiennent au contrat de ce kit.

Résumé

Vous avez distingué permission directe, fins du shebang et encodage, puis livré et exécuté un programme UTF-8 complet en préservant noms, ordre et fichiers corrects. Le défi indépendant du soir reprend ces méthodes avec d’autres preuves de source.