2 votes

Passer des arguments cités à un script de REBOL 3

J'ai constaté qu'il est presque impossible de passer des arguments entre guillemets (contenant des espaces) aux scripts de REBOL 3. Par exemple :

rebol -q script.r "foo bar" 40

Si vous examinez system/script/args il contient la chaîne de caractères "foo bar 40" . C'est inutile ! L'information a été perdue. J'ai besoin de savoir que "foo bar" était le premier argument et 40 était le second. Si j'examine system/options/args J'obtiens le bloc suivant : ["foo" "bar" "40"] . Encore une fois, inutile ! L'information a été perdue.

Je soupçonne que la solution à ce problème consiste à utiliser des délimiteurs d'arguments d'une certaine sorte, par exemple,

rebol -q script.r 'foo bar' -n 40

Cela pourrait facilement être géré par PARSE mais je n'aime toujours pas ça. Cela ne devrait pas être terriblement difficile pour system/options/args pour contenir une chaîne par argument passé.

REBOL est un plaisir à utiliser, et c'est la première chose que je trouve qui me déçoive vraiment :(

4voto

earl Points 10428

Dans REBOL 3, le comportement que vous observez est un bug connu .

(Pour le moment, R3 transmet en interne les arguments du système d'exploitation aux scripts sous la forme d'une chaîne unique, concaténant tous les arguments originaux au cours du processus. Actuellement, ce processus n'est pas entièrement réversible, ce qui est la cause de ce bogue. R3 devrait probablement passer les arguments sous la forme d'une liste de chaînes de caractères à la place, préservant ainsi les arguments originaux. argv mais dépouillé des arguments utilisés par l'interpréteur lui-même).


Dans REBOL 2, system/options/args est plus sûr à utiliser pour les arguments de ligne de commande, alors que system/script/args peut être utilisé pour passer des valeurs entre les scripts REBOL plus directement. Je suppose qu'un comportement similaire sera conservé pour R3.

Voici un script rapide pour inspecter le comportement d'analyse des arguments :

REBOL []
print system/version
print "options args:"
probe system/options/args
print "script args:"
probe system/script/args

REBOL 2, sur OSX :

2.7.7.2.5
options args:
["foo bar" "40"]
script args:
"foo bar 40"

REBOL 3, sur OSX :

2.100.111.2.5
options args:
["foo" "bar" "40"]
script args:
"foo bar 40"

2voto

rgchris Points 1563

Vous pouvez échapper aux guillemets :

rebol -q script.r \"foo bar\" 40

Je ne sais pas si c'est un défaut du shell ou de REBOL ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X