2009-06-04 8 views
3

Voici un simple script Ruby:sortie couleur de commande shell dans Ruby

puts `ls -laG` 

Dans ls de OS X, -G est pour la couleur. Lorsqu'il est exécuté sous bash, j'obtiens une sortie couleur. Lorsque ce qui précède est exécuté à partir d'un script Ruby, je ne vois pas la couleur ou les séquences d'échappement ANSI dans la sortie résultante. D'après ce que j'ai lu, je suppose que c'est parce que le script ne fonctionne pas comme un tty. Existe-t-il un moyen d'exécuter la commande comme si elle était exécutée sous une véritable session tty - ou quelque chose comme ça?

Répondre

7

En regardant le ls man page in OS X, je vois quelques variables d'environnement mentionnées. CLICOLOR active la couleur (comme -G) et CLICOLOR_FORCE (force la couleur même vers une sortie non-terminale).

Je pense que vous obtiendrez ce que vous voulez ...

puts `env CLICOLOR=1 CLICOLOR_FORCE=1 ls -la` 

Vous pouvez définir les variables d'environnement dans votre .profile. Dans mon exemple, j'ai simplement utilisé la commande env pour m'assurer qu'ils sont définis sur la ligne de commande. J'ai laissé de côté l'option -G puisque CLICOLOR fait l'équivalent.

+0

Merci! J'aurais dû noter dans la question que je cours actuellement une commande différente (rake spec), mais je voulais être générique. La définition d'une variable d'environnement m'a toutefois permis de trouver le bon chemin - j'ai trouvé dans la source de rspec que l'on peut définir RSPEC_COLOR = true pour forcer la couleur même si nous ne sommes pas issus d'un tty. –

3

Selon la page de manuel, vous pouvez le forcer en définissant CLICOLOR_FORCE.

Questions connexes