J'ai cette ouverture:tcl semble misshandle espaces dans les paramètres
set r [catch {open "|[concat $config(cmd,sh) [list $cmd 2>@1]]" r} fid]
où $config(cmd,sh)
est cmd /c
et je suis en train de passer un nom de fichier (et peut-être une commande comme écho) dans cmd $. S'il n'y a pas d'espace dans le nom du fichier, à savoir:
cmd est echo /filename
tout va bien. Avec un espace, c'est-à-dire
cmd est echo "/file name"
ce qui semble être passé est:
\"file name\"
.
Lorsque j'essaie ceci sur Linux, j'obtiens "file name"
(pas d'antislashs). J'ai essayé de remplacer les espaces dans le nom de fichier par "\ "
, mais ensuite la cible obtient deux noms de fichiers, c'est-à-dire que l'espace est utilisé pour diviser le nom de fichier.
Je commence à penser que j'ai trouvé un bug dans le port de Windows de Tcl ...
Voulez-vous dire que cela fonctionne bien sur les systèmes * nix? Je n'ai jamais compris comment citer correctement les paramètres de la ligne de commande sous Windows. – pynexj
Les règles de cotation sous Windows sont obscures et dépendent strictement du runtime C utilisé par l'application cible. C'était terrible, mais maintenant presque tout le monde utilise MSVCRT pour que vous puissiez faire un travail à moitié raisonnable. La couche de liaison de plate-forme Tcl gère la plus grande partie de ceci pour vous, et l'obtient bien dans la plupart des cas: les exceptions principales sont lors de l'appel des builtins CMD, car ils n'utilisent pas le runtime normal. (Pourquoi? Pourquoi?) –