La forma más portátil es export -p
.
export -p
enumera las variables exportadas. Esto suele ser declare -x
, si su caparazón tiene declare
.
Los shells de estilo Bourne actualmente en uso deberían ser compatibles export -p
, como lo requiere POSIX :
Cuando se especifica -p , export escribirá en la salida estándar los nombres y valores de todas las variables exportadas, en el siguiente formato:
"export %s=%s\n", <name>, <value>
si se establece el nombre y:
"export %s\n", <name>
si el nombre no está establecido
El estándar continúa explicando que el valor de la variable se muestra de tal manera que generalmente permite su uso posterior en el lado derecho de =
una asignación. Esto quiere decir que puede ser citado. Diferentes proyectiles pueden mostrarlos de manera diferente pero con el mismo efecto. export -p
funciona incluso en proyectiles que no tienen declare
incorporado, como Dash .
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
He canalizado la salida a la grep
compacidad, pero si no la filtra, obtendrá la lista completa de sus variables exportadas. Según su pregunta, parece que eso es lo que puede encontrar más útil.
Algunos shells, como Bash, usan un formato no estándar a menos que se les indique explícitamente que se comporten de manera compatible con POSIX. En Bash export -p
da la misma salida que declare -x
por defecto.
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
Zsh muestra un formato no estándar incluso cuando la compatibilidad POSIX está habilitada:
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
En cualquier caso, puede extraer representaciones portátiles (que pueden ser citadas) buscando una palabra seguida de =
. Esto no se basa en palabras anteriores en la línea, siempre y cuando no precedan inmediatamente =
, lo que no deberían. Por ejemplo:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
Tenga en cuenta que no todas las entradas tienen necesariamente =
. Esto se debe a que las variables pueden desarmarse pero exportarse. Esas entradas se filtran mediante el grep
comando anterior, que puede o no ser lo que desea.
La mayoría de las veces, lo que desea inspeccionar la salida y por lo que no le importa si las entradas están precedidos por export
, declare -x
, typeset -x
, o alguna otra cosa. Entonces solo corre export -p
.
Probé esos comandos en Ubuntu 16.04 LTS con versiones oficialmente empaquetadas de cada shell.