2017-10-07 1 views
0

un cas: J'ai écrit un script sur tsch qui appelle un autre script sur python. Lorsque j'appelle le script python de cmd, c'est OK. Quand je invoque script de test sur tsch j'obtiens l'erreur: la liste des arguments trop longueListe d'arguments trop longue à partir du script shell

Un autre cas:

git grep -e "alex" -- `git ls-files | grep -v 'bin'` 

Je reçois aussi erreur: Argument list too long. Quel est le problème et comment le résoudre?

+0

Vous demandez "quel peut être le problème"? Eh bien, la liste des arguments est probablement trop longue, n'est-ce pas? Avez-vous vérifié sa longueur? Chaque coquille a des limites. – arkascha

+0

Comment puis-je vérifier? Quand je cours depuis la ligne de commande, je n'ai pas de problème. @arkascha – Alex

+0

Eh bien, comment ça s'appelle? Vous pourriez rediriger la liste des arguments dans un fichier par exemple. – arkascha

Répondre

0

Réponse Mise à jour

Je ne suis pas familier avec les git spécifiques commandes que vous utilisez et vous ne semblent pas être répondre raisonnablement aux questions dans les commentaires non plus. Je suppose que vous voulez probablement quelque chose comme ça si:

git ls-files | grep -v 'bin' | xargs -L 128 git grep -e "alex" -- 

Réponse originale

La méthode classique pour résoudre "erreur: Argument list too long" est avec xargs. Il peut être utilisé pour appeler de façon répétée un script dont le nom est fourni, ou echo si vous n'en fournissez pas, avec un nombre limité d'arguments jusqu'à ce que les arguments soient tous consommés. Donc, imaginez que vous avez un million de fichiers dans un répertoire, alors ls * échouera, mais un simple ls fonctionnera. Ainsi, nous pouvons mettre cela à utiliser avec:

ls | xargs -L 128 

qui appellera echo (parce que nous ne fournissons un nom d'utilitaire) à plusieurs reprises avec 128 noms de fichiers à la fois jusqu'à ce que tous sont en écho.

Ainsi, vous pouvez faire:

ls | xargs -L 128 yourScript.py 

pour appeler votre script Python à plusieurs reprises avec 128 noms de fichiers à la fois. Bien sûr, vous pouvez faire quelque chose de complètement différent et incompatible avec cette technique, mais vos réponses ne sont pas très utiles jusqu'à présent ...

+0

Comment puis-je m'intégrer dans 'git grep command'. ie: git grep - 'git ls-files' @Mark Setchell – Alex

+0

Vous devez cliquer sur' edit' sous votre question initiale, et montrer comment vous exécutez cette commande, à quoi ressemblent quelques exemples de lignes de sortie et comment besoin d'être ensuite traité. –

+0

Désolé je ne peux pas voir quelle commande vous avez réellement couru, ni quel type de sortie il produit ... Je suppose que la partie 'grep -v bin' fonctionne bien, donc nous pouvons ignorer ça, alors lancez-vous' git grep -e " alex "- git ls-fichiers"? Que produit-il? Désolé, je ne suis pas un gros utilisateur de 'git'. –