À l'aide de Guillemets à l'intérieur de getRuntime().exec
J'aimerais invoquer bash à l'aide d'une chaîne en entrée. Quelque chose comme:
sh -l -c "./foo"
J'aimerais le faire à partir de Java. Malheureusement, lorsque j'essaie d'appeler la commande à l'aide de getRuntime().exec
, j'obtiens l'erreur suivante:
foo": -c: line 0: unexpected EOF while looking for matching `"'
foo": -c: line 1: syntax error: unexpected end of file
Il semble être lié à ma chaîne à ne pas mettre fin à un EOF.
Est-il un moyen d'insérer une plate-forme spécifique EOF en Java string? Ou devrais-je être à la recherche d'une autre approche, comme l'écriture d'un temp script avant d'invoquer les "sh" ?
- Ne vous obtenez le message d'erreur au moment de la compilation ou à l'exécution?
- Qu'est-ce que le code Java vous permet d'invoquer bash? Les chaînes de caractères que vous utilisez dans le code Java semblent être mauvais. Malheureusement, ils sont absents dans le post, il n'est pas particulièrement utile...
Vous devez vous connecter pour publier un commentaire.
Utiliser ceci:
Point essentiel: ne mettez pas de guillemets dans. Ceci n'est utilisé que lors de l'écriture d'une ligne de commande dans le shell!
par exemple,
echo "Hello, world!"
(entré dans la coque) se traduit en:(Oubliez juste pour le moment que le shell a normalement un builtin pour
echo
, et appelle/bin/echo
à la place. :-))Windows lignes de commande différemment à partir d'UNIX, Mac OS X et GNU/Linux.
Sous Windows, le processus reçoit la saisie de texte est après le nom de l'exécutable (et l'espace). C'est alors le programme à analyser la ligne de commande (ce qui est généralement fait de façon implicite et le programmeur est souvent désemparés).
Dans GNU/Linux le shell les processus de la ligne de commande et gnereates le familier tableau de chaînes de caractères passés à C principal. Vous n'avez pas de coquille. La meilleure approche (même sous Windows) est d'utiliser le formulaire de exec où vous passez à chaque argument de ligne de commande individuellement dans sa propre Chaîne.
Vous pouvez obtenir un shell à l'analyse pour vous si vous avez vraiment voulu. Qui vous ferait exemple ressembler à quelque chose comme (non testé):
EOF n'est PAS un personnage, donc il n'y a aucun moyen d'écrire un EOF.
Vous avez oublié de fermer une chaîne de caractères entre guillemets.
La cause de cette erreur est probablement un manque de syntaxe, les jetons de bash attend mais la chaîne qui vous passe se termine avant bash rencontrée. Regardez pour les fi, fors etc. qui n'ont pas de clôture fi ou fait.
Citations doivent être échappés à l'intérieur d'une chaîne.
Au lieu d'écrire " écrire \".
E. g.
strcpy(c, "Ceci est une chaîne \"par\" guillemets");
si j'étais vous, je voudrais écrire le contenu de la chaîne pour un temp bashfile et voir si bash exécute sans erreur. Si cela s'exécute sans erreur, puis je envisager de débogage supplémentaires;