J'essaie d'exécuter certaines commandes Linux à partir de Java en utilisant la redirection (> &) et les tubes (|). Comment Java peut-il invoquer csh
ou bash
commander?
J'ai essayé d'utiliser ceci:
Process p = Runtime.getRuntime().exec("shell command");
Mais ce n'est pas compatible avec les redirections ou les tuyaux.
java
shell
command-line
Narek
la source
la source
cat
etcsh
n'ont rien à voir les uns avec les autres.Réponses:
exec n'exécute pas de commande dans votre shell
essayer
au lieu.
EDIT :: Je n'ai pas csh sur mon système, j'ai donc utilisé bash à la place. Ce qui suit a fonctionné pour moi
la source
Utilisez ProcessBuilder pour séparer les commandes et les arguments au lieu d'espaces. Cela devrait fonctionner quel que soit le shell utilisé:
la source
S'appuyant sur l'exemple de @ Tim pour créer une méthode autonome:
(L'exemple de test est une commande qui répertorie tous les fichiers d'un répertoire et de ses sous-répertoires, de manière récursive, dans l'ordre chronologique .)
Au fait, si quelqu'un peut me dire pourquoi j'ai besoin de quatre et huit contre-obliques, au lieu de deux et quatre, je peux apprendre quelque chose. Il y a un niveau de plus de se produire sans échapper que ce que je compte.
Edit: Je viens d'essayer ce même code sous Linux, et là, il s'avère que j'ai besoin de moitié moins de barres obliques inverses dans la commande de test! (C'est-à-dire: le nombre attendu de deux et quatre.) Maintenant, ce n'est plus seulement bizarre, c'est un problème de portabilité.
la source