CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SHELL bourne] Redirection prob

oswim10
oswim10
Niveau 10
24 février 2013 à 18:48:14

Bonjour

j'ai un tp à faire pour lequel on demande de lire ce qu'entre l'utilisateur, de le mettre ligne par ligne dans un fichier, d'afficher le fichier puis de le supprimer, mais cela ne marche pas: il n'y a qu'une seule ligne dans le fichier à chaque fois... Pourtant, j'utilise bien >> pour écrire à la fin, et non pas > pour tout effacer..

Le code:

  1. ! /bin/sh
  1. Variable contenant une ligne

ligne='NULL'

  1. Sauvegarder le texte et effacement du contenu s'il existe

rm -f tempExo3.txt
echo "Entrer la texte: (terminer la saisie avec un chaine vide)"
until [ ! "$ligne" ]
do
read ligne
echo "$ligne" >> tempExo3.txt
done

  1. Lecture du texte

echo "Le texte entre est:"
cat tempExo3.txt
echo "Fin du texte"

  1. Suppression du fichier temporaire

rm -f tempExo3.txt

exit 0

Quelquu'n peut-il m'aider svp?

chris_27
chris_27
Niveau 10
24 février 2013 à 19:57:50

Quelle ets la traduction de "until" en français ? :hap:

Sinon, tu devrais songer à utiliser mktemp ou tempfile pour avoir un nom de fichier temporaire fiable/viable. :-)

oswim10
oswim10
Niveau 10
24 février 2013 à 20:23:21

Ben "Jusqu'à que..."

Donc jusqu'à que ligne soit la chaîne vide, non?

chris_27
chris_27
Niveau 10
24 février 2013 à 20:24:53

En réalité, ce n'est pas vraiment le until qui pose problème (même si en général les gens utilise plutôt un while ici).

tu devrais essayer de nettoyer le test après le until. ! n'est pas l'opérateur adéquat pour tester si une ligne est vide ou non, utilise plutôt -n/-z suivant ce que tu veux tester.

chris_27
chris_27
Niveau 10
24 février 2013 à 20:26:09

PS: j'ai fais ma première réponse en me basant juste sur la présence du "until". Comme je viens de le dire, les gens utilisent while en général, donc j'ai pensé (un peu trop vite) que l'erreur venait pas là. :rouge:

oswim10
oswim10
Niveau 10
24 février 2013 à 20:35:34

Tout d'abord, emrci de m'avoir répondu ^^

J'ai essayé avec -n (pour tester si ligne est vide) en faisant:

while [ -n "$ligne" ]

Cela marche (comme avec mon until, ou avec while [ "$chaine" != "" ], mais mon fichier a toujours qu'une seule ligne...

Une ligne est écrite à chaque fois dans mon fichier, et cette ligne écrase tout le contenu du fichier..

oswim10
oswim10
Niveau 10
24 février 2013 à 20:39:46

.....

Je viens de me rendre compte que j'ai oublié une ligne quand j'ai copié mon script:

Au tout début de la boucle, il y a:

trap "rm -f tempExo3.txt;exit 1" 3

Et il semblerait que cette ligne efface sans arrêt mon fichier quand je rentre dans la boucle.

or, le fichier ne devrait s'effacer que si je fais ctrl-c, non?

oswim10
oswim10
Niveau 10
24 février 2013 à 20:44:27

DSL du triple post.

Il semblerait que je me sois trompé dans ma commande trap:

trap 'rm -f tempExo3.txt;exit 1' 2

Maintenant, cela amrche sans problème.

Merci de m'avoir aidé.

chris_27
chris_27
Niveau 10
24 février 2013 à 22:47:46

Tu n'as carrément pas besoin d'un trap ici. :oui:

Cela dit, ça explique pourquoi ton code initial (qui avait l'air bons modulo les détails que j'ai pointés) ne marchait pas. Et ça illustre à quel point l'utilisation des traps est quelque chose de vicieux. :-)

DN4
DN4
Niveau 7
13 mars 2013 à 08:12:22

Tu peux aussi mettre le nom du signal, en l'occurrence INT au lieu de 2, c'est plus compréhensible (uniquement pour quelqu'un qui connait SIGINT, certes). :)

DN4
DN4
Niveau 7
13 mars 2013 à 08:45:32

Et sinon tu pouvais faire plus simple : https://gist.github.com/anonymous/5150041/raw/b0cbffadb8a3a42c4e4f4100ef1788b9304e45d9/gistfile1.sh

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment