Como devo exportar uma variável shell no bash?

Como devo exportar uma variável shell no bash?

Normalmente trabalho em bash no Linux e, se precisar exportar uma variável, posso escrever:

export LC_ALL=C

No entanto, estou trabalhando mais no Solaris atualmente, e os administradores do Solaris com quem trabalho sempre escreverão:

LC_ALL=C ; export LC_ALL

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

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

Obrigado.

Responder1

Acredito que o verdadeiro Bourne Shell (/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 continuaria com ele.

Responder2

No Solaris, /bin/sh requer as duas instruções, enquanto /bin/bash está bem com uma instrução. No Linux, /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 de outro script, sempre use o formato de duas instruçõ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 você está usando. Muitos scripts Solaris usam /bin/sh e este é o padrão para muitos pacotes de software. Como tal, a maioria dos administradores prefere a forma mais portátil de exportar uma variável.

Responder3

Você pode usar o primeiro se estiver trabalhando principalmente no bash, já que pode usar o bash como root shell sem quaisquer efeitos colaterais perigosos desde o Solaris 10. Se a máquina precisar reinicializar em usuário único e não encontrar o bash, há um retorno automático para Bourne Concha.

Responder4

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

informação relacionada