2013-03-26 3 views
0

code de script:echo écrit une variable de fichier avec des guillemets

echo "Command?" 
    read command 

par exemple commande = echo "Bonjour tout le monde"

$command > text.txt 
    cat text.txt 

La sortie est "Bonjour tout le monde" (avec guillemets) , mais je dois la même sortie que donne simplement

echo "Hello world" > text.txt 

-à-dire Bonjour tout le monde. Comment puis-je l'avoir? Veuillez garder à l'esprit que $ commande peut prendre n'importe quelle valeur, doit s'exécuter dans le bash actuel et la sortie enregistrée dans le fichier.

+1

" UTILISEZ PLUS DE CITATIONS! "Ils sont vitaux. entre 'et' et '. Voir http://mywiki.wooledge.org/Quotes et http://wiki.bash-hackers.org/syntax/words –

+0

Je ne suis pas sûr de ce que vous voulez faire. est-ce que 'echo" $ command "> text.txt'? – suspectus

+0

pour être plus sûr: ne pouvez-vous pas proposer à la place une liste de commandes disponibles, et demander à l'utilisateur d'entrer le numéro de cette commande? De cette façon vous n'acceptez pas "tout" (si vous acceptez tout, les utilisateurs intelligents/mal peuvent faire presque tout avec votre script.TRÈS TRÈS difficile à désinfecter toutes les entrées possibles) –

Répondre

0

Vous pouvez utiliser

eval "$command" > text.txt 

Mais attention - si quelqu'un entre rm -rf /?

+0

merci choroba! si quelqu'un entre dans rm -rf/ce sera son problème: DI doit écrire un code qui accepte les commandes d'un shell, les stocke comme variable, les exécute, et enregistre stdout ou stderr – Olga

0

Si vous devez eval une commande, puis enregistrez STDOUT ou STDERR:

Pour STDOUT:

eval "$command" > text.txt 

Et pour STDERR:

eval "$command" 2> text.txt 

Mais, prendre soin, eval est une faute d'orthographe commune du «mal». Si eval est la réponse, vous posez sûrement la mauvaise question. Voir http://mywiki.wooledge.org/BashFAQ/048

Enfin, "NOUS AVONS PLUS DE CITATIONS!" Ils sont vitaux. Apprenez aussi la différence entre 'et' et `.Voir mywiki.wooledge.org/Quotes et wiki.bash-hackers.org/syntax/words

+0

Je viens de trouver que si $ command = clear et I utiliser eval « $ command »> text.txt la fenêtre actuelle de bash ne sera pas nettoyé = ( – Olga

+0

@Olga:. il est parce que « clair » fonctionne en envoyant à stdOut les choses nécessaires pour effacer ce stdout Si vous redirigez STDOUT à "text.txt", ces commandes sont envoyées à "text.txt" et non plus à l'original STDOUT (c'est-à-dire, le terminal) .Si vous voulez envoyer à la STDOUT d'origine et à "file.txt": utiliser: 'command | tee fichier.txt' –

+0

oui, j'ai déjà trouvé que tee est bon dans mon script =) – Olga

Questions connexes