J'essaie de placer un symbole astérisque entre guillemets dans mon application de console en tant qu'argument de ligne de commande, et lorsque je l'obtiens en utilisant System.Environment.getArgs
, j'obtiens la liste des fichiers dans le répertoire courant. C'est faux, parce que je place un astérisque entre guillemets, donc le texte entre guillemets ne devrait pas être substitué. Comment obtenir des arguments de ligne de commande sans une telle substitution dans Windows sous cygwin?Comportement incorrect de getArgs sous Windows sous cygwin
Répondre
Si vous l'entourez de guillemets simples, '*'
, il n'est pas développé, mais les deux guillemets inversés passent au résultat de getArgs
(voir ci-dessous), vous devrez donc les supprimer plus tard.
La raison "*"
est élargie dans Windows est que les guillemets sont légitimes dans le cadre d'un nom de fichier globbable, en raison des espaces. Vous voudrez peut-être del "temp file *.dat"
à un moment donné.
module ListArgs where
import System.Environment
main = getArgs >>= print
donne:
[1 of 1] Compiling ListArgs (ListArgs.hs, ListArgs.o)
Linking ListArgs.exe ...
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe *
["HereDoc.hs","IOutils.lhs","SugaredApplicative.hs","ListArgs.exe","ListArgs.hi","ListArgs.hs","ListArgs.o"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe "*"
["HereDoc.hs","IOutils.lhs","SugaredApplicative.hs","ListArgs.exe","ListArgs.hi","ListArgs.hs","ListArgs.o"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe '*'
["'*'"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe '*
["'*"]
D:\Files\Andrew\prog\haskell\utils>ListArgs.exe -*
["-*"]
AndrewC, merci pour votre réponse, les guillemets simples fonctionnent vraiment dans cmd.exe. Cependant, sous cygwin, cela ne fonctionne pas, j'ai toujours la liste des fichiers dans le répertoire actuel. - * fonctionne partout. –
L'utilisation de préfixes et de guillemets simples est une sorte de solution de contournement, qui n'est évidemment pas destinée à l'utilisateur. Le développeur doit également garder à l'esprit un tel comportement dans Windows, et en quelque sorte éliminer les symboles indésirables de l'entrée. Je préférerais avoir une fonction qui ne fait pas de telles substitutions. Mais semble plateforme Haskell ne fournit pas une telle fonction. C'est dommage. –
Je n'ai pas utilisé cygwin depuis des années. Je vais ajouter une balise pour élargir l'audience. – AndrewC
- 1. SVN sous Cygwin: dossier cible résolu incorrect
- 2. Comportement incorrect sous-module git
- 3. Configuration Emacs + Cygwin sous windows!
- 4. Utilisation de Boost avec Cygwin sous Windows
- 5. Partage de fichiers Windows sous Cygwin?
- 6. PIG sous Windows XP avec Cygwin
- 7. Installer mahout dans windows 7 sous cygwin
- 8. CakePHP Cuire avec Cygwin sous Windows 7
- 9. Rails Development et Cygwin sous Windows XP
- 10. HBase 0.92 autonome sous Windows avec Cygwin
- 11. Installation Hive et Sqoop sous Windows (Cygwin)
- 12. Comportement FolderBrowserDialog sous Windows 7
- 13. Bâtiment 0MQ sous Cygwin
- 14. Configurer OpenCL sous Cygwin?
- 15. crash de setjmp longjmp sous Netbeans cygwin Windows XP
- 16. LaunchConditions Wix sous Windows Vista incorrect
- 17. exécuter playframework sous cygwin
- 18. Comportement incorrect de l'appel du système d'interrogation sous Linux
- 19. Comportement incorrect lors de l'utilisation de GetVersionEx sous Windows 2008 R2 SP1
- 20. Utilisation de CMake avec Eclipse CDT et Cygwin sous Windows
- 21. Comment installer libmysql sous Cygwin?
- 22. Exécution de Cronjob sous cygwin
- 23. Comportement inattendu Outlook Redemption sous Windows 7
- 24. Comportement étrange des émulateurs sous Windows 10
- 25. Comportement RASPHONE.exe sous XP et Windows 7
- 26. Hibernate - comportement différent sous Linux et Windows
- 27. module de journalisation pour les rapports de python fuseau horaire incorrect sous Cygwin
- 28. Le comportement UICollectionView est incorrect en tant que sous-vue
- 29. Disposition verticale du sous-menu et comportement incorrect
- 30. Impossible d'installer Java JDK sous Windows via cygwin/ssh
Cela ressemble plus à une question qui concerne les fenêtres de Haskell de. –
Utilisez-vous des guillemets simples ou des guillemets doubles? –
C'est un problème avec votre shell, pas avec 'getArgs'. Globbing est effectuée avant que tous les arguments sont envoyés à votre programme. – valderman