Como devo exportar uma variável shell no bash?

3

Eu costumo trabalhar no bash no Linux, e se eu precisar exportar uma variável, eu posso escrever:

export LC_ALL=C

No entanto, estou fazendo mais trabalho no Solaris atualmente, e o Solaris Admin com o qual eu trabalho sempre escreve:

LC_ALL=C ; export LC_ALL

Existe uma razão para preferir o último em relação ao primeiro?

Eu acho que o primeiro pode não ser reconhecido por alguns shells. Quais?

Obrigado.

    
por Anon Gordon 19.01.2010 / 03:14

6 respostas

5

Eu acredito que o verdadeiro shell Bourne (/ bin / sh em muitas variantes comerciais do Unix) não suporta a atribuição e exportação em uma única instrução. É assim que me lembro dos meus dias no Solaris.

Não sei se as novas versões do Solaris usam o bash por padrão agora. Independentemente disso, o seu último caso é mais portátil, então eu ficaria com isso.

    
por 19.01.2010 / 03:19
3

No Solaris, / bin / sh requer as duas instruções, enquanto que / bin / bash está bem em uma instrução. No linux, o / bin / sh geralmente é um link simbólico para / bin / bash, então não há diferença.

Se você estiver escrevendo um script que pode ser originado por outro script, use sempre o formato de duas declarações. Se o script não for ou não for originado, basta verificar a linha shebang na parte superior do script para ver qual shell está usando. Muitos scripts do Solaris usam / bin / sh, e esse é o padrão para muitos pacotes de software. Como tal, a maioria dos administradores prefere a maneira mais portátil de exportar uma variável.

    
por 19.01.2010 / 04:48
2

Você pode usar o primeiro se você estiver trabalhando principalmente no bash, já que você pode usar o bash como shell de root sem nenhum efeito colateral perigoso desde o Solaris 10. Se a máquina precisar reinicializar em Single User e não encontrar o bash há um fallback automático para a Bourne Shell.

    
por 26.01.2010 / 09:43
1

Qualquer shell derivado Bourne moderno que conheço suporta o formato all-in-one. Eu acho que versões mais antigas do shell Bourne original podem exigir a versão separada.

    
por 19.01.2010 / 03:20
1

Estou trabalhando no Solaris 2.6, por volta de 1998. Essa versão só veio com sh e csh originalmente. Usando sh, vejo que você precisa da versão de duas linhas mencionada para ver o resultado correto de env. Usando bash de sunfreeware.org, e funciona bem com a versão de uma linha.

    
por 28.01.2010 / 18:53
0

Em um shell de Posix, "typeset" pode declarar uma variável, definir um valor e exportar em uma instrução "única".

typeset -x foo=bar

Esse comportamento se aplica ao Posix Shell e ao Korn Shell.

    
por 29.01.2010 / 23:22