Deseo escribir un script de shell para exportar variables.
A continuación, he enumerado el guión.
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"
Pero esto no parece funcionar correctamente. En su lugar, tengo que ejecutar individualmente los comandos en el indicador de shell.
Respuestas:
Muéstrenos más partes del script y díganos qué comandos tuvo que ejecutar individualmente y desea simplemente.
Mientras tanto, debe usar comillas dobles, no comillas simples para expandir las variables:
export PATH="/home/linux/Practise/linux-devkit/bin/:$PATH"
Los puntos y comas al final de un solo comando tampoco son necesarios.
Hasta aquí:
#!/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 ...
Porque
su
puedes ejecutarlo con:su -c 'sh /path/to/script.sh'
Nota: El OP no pedía explícitamente pasos sobre cómo crear variables de exportación en un shell interactivo utilizando un script de shell. Solo pidió que se evaluara su guión como máximo. No mencionó detalles sobre cómo se usaría su guión. Pudo haber sido usando
.
osource
desde el shell interactivo. Podría haber sido un scipt independiente o podría haber sido tomadosource
de otro guión. Las variables de entorno no son específicas de los shells interactivos. Esta respuesta resolvió su problema.fuente
source
o.
). Aprecio que responda exactamente a la pregunta de OP, pero encontré este tema en Google, y la siguiente respuesta me ayudó más que la suya. Upvotes para la segunda respuesta (consource
y.
confirmo mi opinión ...Necesita ejecutar el script como
source
o la abreviatura.
source ./myscript.sh
o
Esto se ejecutará dentro del shell existente, asegurando que las variables creadas o modificadas por el script estarán disponibles después de que se complete el script.
La ejecución de la secuencia de comandos solo con el nombre de archivo ejecutará la secuencia de comandos en una subcapa separada.
fuente
typeset -gx
, exportadas, etc. momento y, sin embargo, no sabía que una subcapa se ejecuta con su propio alcance. gracias por salvarme el día de la inminente gestión de la falta de iraEjecute el script como source = para ejecutarlo también en modo de depuración.
source= ./myscript.sh
fuente
No puedo resolverlo con
source ./myscript.sh
. Dice el error de fuente no encontrada.Falló también al usar
. ./myscript.sh
. Da no se puede abrir myscript.sh.Entonces, mi opción es ponerlo en un archivo de texto para que se llame en el siguiente script.
#!/bin/sh echo "Perform Operation in su mode" echo "ARCH=arm" >> environment.txt 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 -?" >> environment.txt echo "Export CROSS_COMPILE done" # continue your compilation commands here ...
Entonces llámelo cuando sea necesario:
while read -r line; do line=$(sed -e 's/[[:space:]]*$//' <<<${line}) var=`echo $line | cut -d '=' -f1`; test=$(echo $var) if [ -z "$(test)" ];then eval export "$line";fi done <environment.txt
fuente
myscript.sh
para que genere un archivo llamadoenvironment.sh
(con las declaraciones de exportación) y luego solo fuente enenvironment.sh
lugar del ciclo while siempre que sea necesario.