ejecutar script bourne shell con comando de exportación sameline

Tengo un script de shell algo así como

#!/bin/sh

. ./.profile
echo "sample"

y el archivo .profile tiene

export variable = xyz

cuando ejecuto el script me sale un error que dice

variable = xyz no es un identificador

Sé que esto se debe a la exportación sameline en .profile .

¿Hay alguna manera de hacerlo funcionar? No debería cambiar el sh a bash o ksh y no puedo cambiar el archivo .profile ya que tiene muchas líneas con exportación sameline.

0
Su export es incorrecta, use export varibale = "xyz" .
agregado el autor fedorqui, fuente

2 Respuestas

Si tienes un shell Bourne real, entonces debes dividirlo en dos operaciones:

variable=xyz
export variable

Sin embargo, el número de tales proyectiles es casi infinitamente pequeño en estos días, pero hasta hace muy poco al menos (en los últimos cinco años, por ejemplo), el /bin/sh en Solaris era lo suficientemente Bourne-shell así que necesitabas la operación de dos comandos.

El shell Korn, los shells POSIX shells y Bash son compatibles. comando exportar y asignar operación.

La línea que muestra tiene problemas: no puede tener espacios alrededor del operador de asignación. Usted dice haber escrito:

export varibale = xyz

Deberías haber escrito:

export varibale=xyz

Sin embargo, el mensaje de error estaría en la línea de:

-bash: export: `=': not a valid identifier

La queja debería ser que = no es un identificador, no es que variable = xyz no sea un identificador válido. Sospecho un poco de que lo que citas no sea 100% exacto. Como puede ver, eso fue de bash , pero también esperaría lo mismo de un shell Bourne. Si tú escribes:

$ export 'variable = xyz'
-bash: export: `variable = xyz': not a valid identifier
$

luego recibes el mensaje que reclamas, pero tuve que agregar las cotizaciones alrededor del 'valor' exportado.

0
agregado
samplefile: variable = xyz: no es un identificador ... este es el error exacto que obtengo
agregado el autor user3108179, fuente
¿Hay alguna manera en que podamos evitar escribirlo en dos líneas diferentes ... Estoy trabajando en la plataforma de Unix
agregado el autor user3108179, fuente
ok para evitar confusiones ... No quiero cambiar mi .profile ya que está replicado en muchos servidores diferentes por lo que cambiar el .profile está fuera de discusión ...
agregado el autor user3108179, fuente
¿Cómo se resuelve este problema al cambiar shell por bash o ksh ... ya que el script está en bourne shell (sh)
agregado el autor user3108179, fuente
Sin espacios, indica claramente que tiene un shell Bourne real y debe usar la notación de asignación y exportación separada descrita en la primera parte de mi respuesta. ¿En qué plataforma estás corriendo?
agregado el autor Jonathan Leffler, fuente
Sí: variable = xyz; exportar la variable con el punto y coma que separa los dos comandos. Algunos de mis scripts de perfil todavía usan esto porque pretenden trabajar con un verdadero shell de Bourne y aún no he tenido motivos para cambiarlos. Pero asumo un shell más moderno por defecto. Si tiene un shell Bourne real, no hay forma de evitar dos operaciones separadas (asignación y exportación) para crear una variable de entorno.
agregado el autor Jonathan Leffler, fuente
Si no funciona, pero no puede cambiarlo, ya no tiene opciones. Su mejor opción es conseguir que su shell de inicio de sesión cambie a bash o ksh - cualquiera aceptará la notación export var = value .
agregado el autor Jonathan Leffler, fuente
Quizás no sea así; tal vez necesite cambiar la línea shebang para especificar /bin/ksh o /bin/bash en lugar de /bin/sh ? He perdido la noción de cuál es realmente tu problema, pero como lo que tienes no funciona, algo tendrá que cambiar.
agregado el autor Jonathan Leffler, fuente

En shell-script, los espacios no están permitidos en la asignación de variables .

Debe usar simplemente:

export variable=xyz
0
agregado
ok ... export variable = xyz .... pero la pregunta es: no debería cambiar sh a bash o ksh y no puedo cambiar el archivo .profile ya que tiene muchas líneas con sameline export ..... ¿hay alguna forma de ejecutar sin obtener ese error
agregado el autor user3108179, fuente