Exécuter des commandes redirigées avec Runtime.exec()
En Java, Runtime.exec() est couramment utilisé pour exécuter des commandes shell. Cependant, tenter d'exécuter une commande délimitée par des tubes comme "ls /etc | grep release" directement à l'aide de Runtime.exec() peut entraîner un comportement inattendu en raison de différences entre plates-formes dans la gestion des tubes.
Solution :
1. Créer un script :
Pour garantir une exécution de canal indépendante de la plate-forme, écrivez un script qui exécute le pipeline souhaité et exécutez le script au lieu des commandes séparées. Par exemple :
// script.sh ls /etc | grep release
Exécutez ensuite le script à l'aide de Runtime.exec() :
String command = "/bin/sh script.sh"; Process child = Runtime.getRuntime().exec(command);
2. Utiliser l'invocation du shell :
Une autre approche consiste à invoquer le shell directement et à transmettre la commande délimitée par des barres en tant qu'argument unique. Ceci peut être réalisé en utilisant le code suivant :
String[] cmd = { "/bin/sh", "-c", "ls /etc | grep release" }; Process child = Runtime.getRuntime().exec(cmd);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!