Un programme qui n'est pas lui-même le shell ne peut pas "générer" un fichier de commandes shell comme peut le faire le shell lui-même. Un programme peut exécuter un tel fichier en tant que script, directement ou en invoquant un shell pour l'exécuter, mais le script obtient alors son propre environnement et toutes les modifications qu'il applique à cet environnement ne se propagent pas à l'environnement du processus parent.
Les programmes reçoivent leur environnement en fonction du démarrage du programme. Si vous voulez qu'une variable soit définie dans l'environnement d'un programme, la chose la plus simple à faire est de l'organiser quand le programme est appelé, soit en l'exportant de l'environnement du processus parent, soit en enveloppant le programme dans un script cela arrange pour le même. Il existe également des alternatives supplémentaires au démarrage du processus.
Si un programme C veut modifier son environnement après démarrage, il peut utiliser les fonctions setenv()
et unsetenv()
. Ceux-ci sont définis par POSIX, pas par C lui-même, mais si nous parlons de l'origine des commandes shell, il semble raisonnable de supposer un contexte POSIX. En outre, si vous essayez de définir CYAN
comme une variable de shell dont le contenu est une séquence d'échappement ANSI, votre syntaxe est incorrecte. Aucune séquence d'échappement n'est reconnue dans les guillemets simples ordinaires (même une guillemets fermante ne peut pas être échappée). Dans les doubles guillemets, la barre oblique inverse fonctionne comme un caractère d'échappement, mais dans un sens strict: les codes de caractères de style C ne sont pas pris en charge ici. Si, encore une fois, vous traitez que dans la coquille, par opposition à C, alors vous semblez vouloir
CYAN=$'\e[96m'
(Notez le $
, ce qui est essentiel pour \e
d'être reconnu comme représentant la « fuite » caractère, et qui amène le shell à reconnaître également quelques autres séquences d'échappement de style C.)
Problèmes avec les paramètres de votre terminal? Votre script fonctionne-t-il correctement? –
note: "sourcing" dans ce contexte n'a aucun sens. Voulez-vous * exécuter * le script? –
Pourriez-vous être plus précis? Quand je source le script shell normalement à partir du terminal "source ./myscript.sh" tout fonctionne correctement. Oui, je veux exécuter le script. Mais comme: "./script.sh" ou "source ./script.sh", en utilisant le programme C. – Yeez