2016-02-02 1 views
0

Cela peut être une question triviale, mais quelle est la bonne façon d'utiliser des variables intégrées dans un script shell? Par exemple, si je veux écrire un script qui ouvre l'éditeur de texte par défaut, qui est spécifié dans $ EDITOR. Le simple fait d'utiliserExportation de variables internes dans le script bash

export EDITOR 

n'aidera pas. J'ai découvert que la définition variable EDITOR aide à résoudre ce problème:

#!/bin/bash  
export EDITOR=vim 
$EDITOR 

ci-dessus fonctionnera, mais est-il possible d'exporter la variable sans le définir? Merci d'avance.

+0

Qu'est-ce que cela accomplirait? Non, vous ne pouvez pas exporter quelque chose qui n'existe pas. Pourquoi voudriez-vous exporter quelque chose à partir d'un script qui exécute seulement la chose que vous venez de définir? Vous semblez être confus au sujet de ce que «l'exportation» fait. Peut-être devriez-vous mettre à jour votre question pour expliquer pourquoi vous posez cette question. – tripleee

+0

Peut-être que cela peut aider? Un scénario courant est que vous voulez lancer 'EDITOR' s'il est défini, et revenir à, par exemple,' nano'. Une façon compacte et idiomatique de le faire est '$ {EDITOR-nano}' – tripleee

+0

Demandez-le sur http://unix.stackexchange.com/ – ceving

Répondre

1

EDITOR n'est pas une variable "intégrée" et vous pouvez l'exporter (c'est-à-dire en faire une variable d'environnement) quand vous le souhaitez. Rien de magique ici. Bien qu'il soit vrai que bash interprète cette variable dans certaines situations, il est assez fréquent que les applications accèdent à cette variable, quand elles veulent lancer un éditeur, donc en pratique, EDITORest habituellement exporté. Par exemple, j'ai dans mon .zshrc et .bashrc la ligne

export EDITOR=nano 

à votre question: Vous pouvez exporter un varible avec un vide falue, comme celui-ci

export EDITOR= 

mais je n » Je ne vois pas ce que vous en retirerez.

Si vous voulez juste faire en sorte que votre script shell et tous les processus descendants ont mis EDITOR, un idiome commun est

: ${EDITOR:=vim} 
export EDITOR 

Si l'utilisateur de votre script ne définit pas cette variable, il est réglé ici - vous avez juste besoin de deux lignes, parce que la syntaxe bash ne permet pas de combiner cela en un seul.

+0

Vous pouvez le réduire à une ligne avec 'export EDITOR = $ {EDITOR: -vim } ', mais ce n'est pas mieux que de simplement utiliser deux lignes. – chepner

+0

J'aime votre suggestion. Du point de vue de la maintenance, c'est un peu mieux l'OMI. – user1934428