J'ai un fichier de script de chiffrement et je voudrais l'exécuter directement.
Toutes les réponses que j'ai pu trouver sur SO au meilleur de ma connaissance utilisent la commande neo4j-shell
qui dans mon version (serveur Neo4j 3.5.5) semble être obsolète et remplacée par la commande cyphershell
.
Utilisation de la commande sudo ./neo4j-community-3.5.5/ bin / cypher-shell --help
J'ai reçu les instructions suivantes.
utilisation: cypher-shell [-h] [-a ADDRESS] [-u USERNAME] [-p PASSWORD] [--encryption {true, false}] [--format {auto, verbose, plain}] [--debug] [--non-interactive] [--sample-rows SAMPLE-ROWS] [--wrap {true, false}] [-v] [--driver-version] [--fail-fast | --fail-at-end] [chiffrement]
Un shell de ligne de commande où vous pouvez exécuter Cypher sur un instance de Neo4j. Par défaut, le shell est interactif mais vous pouvez utilisez-le pour le script en passant cypher directement sur la commande ligne ou en canalisant un fichier avec des instructions de chiffrement (nécessite Powershell sous Windows).
Mon fichier est le suivant qui tente de créer un graphique à partir de fichiers csv et il provient du livre "Algorithmes de graphes".
sudo cat neo_4.cypher| sudo ./neo4j-community-3.5.5/bin/cypher-shell -u usr -p 'pwd'
Quand j'essaye pour passer le fichier directement avec la commande:
Invalid input 'n': expected <init> (line 1, column 1 (offset: 0)) "neo_4.cypher" ^
il demande d'abord le nom d'utilisateur et le mot de passe mais après avoir tapé le bon mot de passe (le mauvais mot de passe entraîne l'erreur Le client n'est pas autorisé en raison d'un échec d'authentification.
) J'obtiens l'erreur:
sudo ./neo4j-community-3.5.5/bin/cypher-shell neo_4.cypher
Quand j'essaye de faire un piping avec la commande:
WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data" AS base WITH base + "transport-nodes.csv" AS uri LOAD CSV WITH HEADERS FROM uri AS row MERGE (place:Place {id:row.id}) SET place.latitude = toFloat(row.latitude), place.longitude = toFloat(row.latitude), place.population = toInteger(row.population) WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base WITH base + "transport-relationships.csv" AS uri LOAD CSV WITH HEADERS FROM uri AS row MATCH (origin:Place {id: row.src}) MATCH (destination:Place {id: row.dst}) MERGE (origin)-[:EROAD {distance: toInteger(row.cost)}]->(destination)
3 Réponses :
Je pense que la clé est ici:
sudo cypher-shell arguments_as_needed < neo_4.cypher
Cela signifie que le paramètre est un véritable code de chiffrement, pas un nom de fichier. Ainsi, cela fonctionne:
cat neo_4.cypher | cypher-shell
Mais ce n'est pas le cas (car le texte "neo_4.cypher" n'est pas une requête de chiffrement valide)
example of piping a file: cat some-cypher.txt | cypher-shell
L'aide dit aussi:
cypher-shell neo_4.cypher
Donc:
GMc@linux-ihon:~> cypher-shell "match(n) return n;" username: neo4j password: **** +-----------------------------+ | n | +-----------------------------+ | (:Job {jobName: "Job01"}) | | (:Job {jobName: "Job02"}) |
devrait fonctionner. Peut-être que votre problème est tout le sudo. Plus précisément le chat ... | sudo cypher-shell. Il est possible que sudo protège cypher-shell de certaines entrées arbitraires (bien que cela ne semble pas le faire sur mon système).
Si vous avez vraiment besoin d'utiliser sudo pour exécuter cypher, essayez d'utiliser le suivant:
cypher-shell -- help ... Stuff deleted positional arguments: cypher an optional string of cypher to execute and then exit
Oh, aussi, votre script n'a pas de retour, donc il n'affichera probablement aucune donnée, mais vous devriez quand même voir les rapports récapitulatifs des enregistrements
Essayez peut-être d'abord quelque chose de plus simple, comme une simple requête match ... return ... dans votre script.
Oh, et n'oubliez pas de terminer la requête de chiffrement avec un point-virgule!
Merci pour votre réponse. J'ai essayé avec une commande plus simple avec un résultat. Apparemment, j'ai besoin du sudo
même pour des commandes simples telles que sudo ./neo4j-community-3.5.5/bin/cypher-shell "MATCH (n: Person) RETURN n LIMIT 25; "
sinon aucune sortie n'est générée. De plus, votre exemple sudo cypher-shell arguments_as_needed
Je me demande s'il y a un bug? Mon système fait la même chose. Il existe ce rapport de bogue similaire ici . Ce n'est pas exactement le même problème (mon fichier n'a pas de caractères de nomenclature) mais c'est similaire. Je vais continuer à jouer avec pour voir si je peux en savoir plus.
Merci pour votre aide. Le problème est que pour le chiffrement, chaque ligne doit se terminer par ;
. J'ai encore besoin de sudo
mais ce n'est pas un problème.
Après avoir dormi dessus, je suis arrivé à la même réalisation que j'avais (une fois de plus) oublié le point-virgule de fin de ma requête dans le fichier texte. Une fois ajouté, cela fonctionne comme prévu. J'ajouterai cela à la réponse :-)
@Francesco_Boi Si l'une de ces réponses vous a aidé, pourriez-vous s'il vous plaît accepter l'une d'elles comme réponse et "voter". Cliquez simplement sur la petite "coche" grise à côté de la réponse qui, selon vous, vous a le plus aidé.
J'ai voté pour le vôtre lorsque vous avez publié: en fait, il a un score de +1 (par moi). Ce qui a fonctionné est expliqué dans ma réponse.
Le problème est dans le fichier de chiffrement: chaque ligne doit se terminer par un point-virgule: ;
. J'ai encore besoin de sudo
pour exécuter le programme.
Le fichier extrait du livre semble également contenir d’autres erreurs.
Utilisez cypher-shell -f yourscriptname
. Vérifiez avec --help
pour plus de description.