2017-04-21 2 views
3

J'essaie de définir une variable d'environnement pour Bash. Cependant, j'ai besoin que ceci soit réglé avant l'un des scripts de démarrage du shell (y compris /etc/profile), car /etc/profile agit différemment en fonction de la valeur de cette variable. Plus précisément, je veux créer un raccourci vers MinTTy qui fonctionne comme git-bash, mais j'ai besoin de définir la variable d'environnement MSYSTEM avant le démarrage du shell, ou au moins avant de commencer à traiter les scripts de démarrage.Puis-je définir une variable d'environnement sur la ligne de commande de Bash?

Une solution qui a MinTTy en définissant la variable d'environnement avant de démarrer le shell sera également acceptée.

Edit: Ce que je cherche vraiment est en quelque sorte une option de ligne de commande BASH qui établira une variable d'environnement, un peu semblable à l'option -D à la plupart des compilateurs C (et d'autres). Ce serait une solution "générale". Alternativement, une option similaire (ligne de commande ou configuration) à MinTTy fera également le travail.

Pour mon besoin spécifique, j'ai une idée pour un palliatif potentiel: Exécuter un script BASH - sans scripts de démarrage - qui définit ma variable requise et exec s un autre shell en tant que shell de connexion.

+0

ne sais pas si cela fonctionnera pour votre cas, mais trycreating un script d'emballage qui a mis l'env variable, puis exécutez = >> "source/etc/profile". plus tous les autres scripts qui sont exécutés au démarrage/logintim. – zee

+0

@zee J'ai considéré cela. Mais ensuite, je dois répliquer complètement le processus de démarrage: login/interactif, les fichiers 'profile' et' bashrc' corrects, etc. – Menachem

+0

Je peux essayer de démarrer le shell sans fichiers de démarrage, mais exécute seulement un script shell qui définit le variable d'environnement, puis 'exec'sa un login ou un shell interactif. – Menachem

Répondre

2

Définir la cible de votre fichier de raccourci comme suit:

C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash" 

Cette commande:

  • invoque bash directement comme shell de connexion (-l)
  • il passe une commande (-c) qui définit la variable d'environnement d'intérêt (MSYSTEM=MINGW64), puis appelle une nouvelle copie de bash (exec -l bash), qui hérite de l'environnement existant, ainsi que la nouvelle définition, mais des sources du profil (s) à nouveau, en raison de -l
    (et précèder - au nom de l'exécutable rapporté dans $0 (-bash), comme cela se passerait si vous avez commencé Mintty avec juste -, qui est ce que fait le raccourci normal Cygwin64 Terminal).

Une alternative consiste à définir la variable d'environnement dans de Windows premier.

  • [Pas une option pour l'OP] Si la variable d'environnement doit toujours ont la même valeur, réglez la persistance comme suit: courir sysdm.cpl, allez dans l'onglet Advanced, cliquez sur Environment Variables... et définir variable MSYSTEM selon les besoins.

  • Pour définir la variable ad hoc, créez un fichier batchcomme suit et faire la cible de raccourci fichier batch:

    @echo off 
    
    # Define the env. variable with the desired value. 
    set "MSYSTEM=MINGW64" 
    
    # Invoke Mintty with a login shell, which will now see the env. variable. 
    # Adjust the path to mintty.exe as needed. 
    c:\cygwin64\bin\mintty.exe - 
    

Note: Ouverture du fichier de commandes à partir d'un raccourci ouvre brièvement une fenêtre de console normale avant d'ouvrir Mintty, ce qui peut être indésirable.

Un script WSH d'aide simple, comme illustré dans this answer, peut empêcher cela.

+1

@Menachem: Mon plaisir; bon point re '-'; J'ai mis à jour la réponse, cependant, pour être cohérent avec le comportement par défaut, j'ai utilisé 'exec -l bash', de sorte que' $ 0' rapporte '-bash', pas' -/bin/bash'. – mklement0

0

Vous devriez simplement pouvoir faire comme vous le faites dans l'invite de commande. Par conséquent, vous pouvez faire:

set VAR=VarContents 
+0

Puis-je vous suggérer de supprimer cette réponse? Il duplique le contenu dans ma réponse (qui était là même dans la forme originale de ma réponse au moment où vous avez posté le vôtre), et en soi cela ne suffit pas pour résoudre le problème du PO. – mklement0

1

Bien que je l'ai déjà accepté une réponse ci-dessus, je trouve ce lien qui traite spécifiquement de la deuxième partie de ma question (Mintty spécifique) ou une autre façon de définir une variable d'environnement avant d'exécuter un commander.

Le contenu du raccourci Windows peut être:

C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l 

(Suggérée par Mintty Tips. Setting environment variables)