Quando se trata de alterar a variável de ambiente
PATH(digamos, em "~ / .bashrc"), vi algumas maneiras diferentes de fazer isso
Algumas delas são formas válidas de definir $PATH , mas algumas não são formas válidas de definir $PATH ; a maioria tem a mesma captura e algumas diferem em seu escopo;
Falando da sintaxe (em shells compatíveis com Bash);
-
PATH=$PATH:/new/path: está ok, mas você precisará escapar de espaços em "/ new / path", se houver; -
PATH="$PATH:/new/path": está ok, e você não precisará escapar de espaços em "/ new / path", se houver; -
export PATH = $PATH:/new/path: não está ok, já que você não pode ter espaços antes / depois de um operador de atribuição (e você precisaria escapar de espaços em "/ new / path"); -
export PATH = ${PATH}:/new/path: o mesmo queexport PATH = $PATH:/new/path; -
setenv PATH $PATH:/new/path:setenvécshintegrado; deve ser o mesmo quePATH=$PATH:/new/path;
As aspas simples / duplas impedem que o Bash se destaque em espaços em branco; Aspas simples impedem que o Bash execute expansões de parâmetros, substituições de comandos ou expansões aritméticas, forçando Bash a interpretar literalmente a string incluída; aspas duplas não evitam que Bash realize expansões de parâmetros, substituições de comandos ou expansões aritméticas, e no segundo caso elas são necessárias para permitir uma expansão de parâmetros em $PATH ;
Chaves são necessárias caso o caractere após uma variável seja um caractere válido para um nome de variável, mas : não é, então no quarto caso elas não são realmente necessárias;
Falando das diferenças entre var=value , export var=value e setenv var value ;
-
var=valuedefine o valor de$varno shell atual; shells / processos bifurcados não herdarão a variável nem seu valor; -
export var=valuedefine o valor de$varno ambiente atual; shells / processos bifurcados herdarão a variável e seu valor; -
setenv PATH $PATH:/new/path: o mesmo queexport var=value;
$ foo=bar
$ bash
$ echo $foo
$ exit
exit
$ export foo=bar
$ bash
$ echo $foo
bar
A propósito, meu Ubuntu 14.04 não possui uma entrada manual para
export, mas tem um parasetenv. Por quê?
Se você digitar man setenv , obterá a saída de man 3 setenv , que é a entrada manual da função setenv() do "Linux Programmer's Manual"; Como dito anteriormente, não há comando setenv no Ubuntu nem integrado no Bash chamado setenv , embora haja um setenv embutido em csh ;
export em vez disso é um Bash embutido, e para obter informações sobre isso você terá que executar help export :
$ help export
export: export [-fn] [name[=value] ...] or export -p
Set export attribute for shell variables.
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
Options:
-f refer to shell functions
-n remove the export property from each NAME
-p display a list of all exported variables and functions
An argument of '--' disables further option processing.
Exit Status:
Returns success unless an invalid option is given or NAME is invalid.