2016-05-29 1 views
1

J'utilise Mac. J'ai compilé un bytecode run, il peut travailler sur une entrée de chaîne dans une ligne de commande comme:Les espaces ne sont pas reconnus de la même manière dans un fichier txt et dans une ligne de commande

./run "Here is a text input" 

Pour tester run, je vous écris inputs.txt qui contient couper les lignes d'entrées, une ligne représente une entrée:

"input1" 
"This is input 2" 
"input 3" 

Et, voici une test.sh:

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    echo "Text read from file: $line"; 
    ./run $line 
done < inputs.txt 

Le problème est que, un test échoue pour les lignes d'entrée qui contiennent de l'espace, bien que tester la même ligne dans la commande fonctionne.

Donc je suppose que l'espace n'est pas interprété de la même façon lorsqu'il est dans inputs.txt et dans une ligne de commande.

Est-ce que quelqu'un sait quoi faire pour que les espaces dans inputs.txt soient interprétés de la même manière que dans une ligne de commande? Peut-être devrais-je changer le format de inputs.txt?

+1

pourrait être un problème de devis. Débarrassez-vous des guillemets dans le fichier d'entrée, puis ajoutez-les au script: './run" $ line "' – jdigital

Répondre

2

Je pense que vous avez juste besoin de changer

./run $line 

à

./run "$line" 

De cette façon, l'utilisation de $line ne sera pas divisé en arguments avant terme est appelé.