shell
2013-08-31 17 views 37 likes 
37

Desidero scrivere uno script di shell per esportare le variabili.Script di shell per impostare le variabili di ambiente

Di seguito è elencato lo script.

echo "Perform Operation in su mode" 
export ARCH=arm 
echo "Export ARCH=arm Executed" 
export PATH='/home/linux/Practise/linux-devkit/bin/:$PATH'; 
echo "Export path done" 
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-'; 
echo "Export CROSS_COMPILE done" 

Ma questo non sembra funzionare correttamente. Devo eseguire i comandi singolarmente al prompt della shell.

+0

quale shell si sta utilizzando (ad esempio, bash, ksh, sh) – Tom

+0

possibile duplicato di [Salva variabili globali BASH] (http://stackoverflow.com/questions/10779771/save-global-variables-bash) – tripleee

+1

Possibile duplicato di [Esportare una variabile nell'ambiente da un script bash senza indicarlo) (http://stackoverflow.com/questions/16618071/export-a-variable-to-the-environment-from-a-bash-script-without-sourcing-it) –

risposta

24

Per favore mostraci più parti dello script e dicci quali comandi devi eseguire singolarmente e vuoi semplicemente.

Nel frattempo è necessario utilizzare le virgolette non sola offerta per espandere le variabili:

export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH" 

e virgola alla fine di un unico comando è anche inutile.

Finora:

#!/bin/sh 
echo "Perform Operation in su mode" 
export ARCH=arm 
echo "Export ARCH=arm Executed" 
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH" 
echo "Export path done" 
export CROSS_COMPILE='/home/linux/Practise/linux-devkit/bin/arm-arago-linux-gnueabi-' ## What's next to -? 
echo "Export CROSS_COMPILE done" 
# continue your compilation commands here 
... 

Per su è possibile eseguirlo con:

su -c 'sh /path/to/script.sh' 

(Per coloro che downvote questa risposta, si dovrebbe sapere che il PO non è stato richiedendo esplicitamente una conchiglia script che esporterebbe le variabili su una shell -interattiva- e non su uno script di shell di una volta dove usare source o . per chiamarlo sarebbe privo di significato a meno che non si stia effettivamente chiamando lo script da ano ther script. Ovviamente è possibile utilizzare source o . se è veramente necessario, ma c'era anche un altro problema che doveva essere risolto, e sembra che il vero problema in questo contesto fosse l'uso di virgolette singole.

Non sottovalutarlo solo perché non ti aiuta. La risposta era per la domanda fatta, e per il PO.

Sarebbe applicata in caso di OP -actually mentioned- che si trattava effettivamente di messa a punto delle variabili di ambiente esportabili su una shell interattiva attraverso uno script di shell.)

+1

Hons konsolebox !! Grazie mille . ma non ho capito la differenza .. export PATH = "/ home/linux/Practice/linux-devkit/bin /: $ PATH" tra virgolette. & export CROSS_COMPILE = '/ home/linux/Practice/linux-devkit/bin/arm-arago-linux-gnueabi-' tra virgolette singole. lo script modificato da te funziona bene. –

+0

L'espansione @PragRao Paramater semplicemente non si verifica tra virgolette singole. Puoi avere spiegato i dettagli su come quotare ulteriormente [qui] (https://www.gnu.org/software/bash/manual/html_node/Quoting.html). – konsolebox

+2

Il nome della domanda @konsolebox è simile a "Script della shell per impostare le variabili di ambiente" - la maggior parte della comunità ha trovato questa domanda solo per risolvere il problema dell'esecuzione di questo tipo di script dalla shell corrente ('source' o' .'). Apprezzo che tu risponda esattamente alla domanda di OP, ma ho trovato questo argomento da google e la risposta successiva mi ha aiutato più del tuo. Gli Upvotes per la seconda risposta (con 'source' e' .' confermano la mia opinione ... – avtomaton

127

è necessario eseguire lo script come source o la scorciatoia .

source ./myscript.sh 

o

. ./myscript.sh 

Questo verrà eseguito all'interno del guscio esistente, garantendo tutte le variabili creati o modificati dallo script sarà disponibile dopo il completamento dello script.

L'esecuzione dello script utilizzando solo il nome del file eseguirà lo script in una subshell separata.

+0

usando source ./setenv.sh -: fornisce l'errore source non trovato. e usando. ./setenv.sh che dà non può aprire setenv.sh. Potete per favore aiutarmi su questo. Grazie – Vishal

+2

questa correzione ha risolto il mio problema – sampathpremarathna

+1

mi stavo grattando la testa per un'ora perché quei dannati vars di esportazione non ci sono arrivati ​​(zsh) provato 'typeset -gx', export ecc e stava avendo il mio wtf? momento e ancora - non sapeva che una subshell viene eseguita con il suo scopo. grazie di aver salvato la mia giornata dall'imminente rabbia miss-management – Inoperable

Problemi correlati