A menudo, en una sesión de terminal hago cosas como esta:
$ Source="/bin"
$ AllFiles=$(ls $Source/* | wc -l)
$ echo $AllFiles
159
Es tedioso escribir echo $Source
seguido de echo $AllFiles
, etc. para mostrar las variables que he definido en la sesión actual del terminal. Si uso printenv
mi pantalla se llena de cosas que no definí. Si lo uso declare -p
pasa lo mismo.
¿Cómo puedo mostrar solo las variables que he definido en esta sesión de terminal?
Respuesta1
declare -p
le mostrará TODAS las variables definidas fuera de las variables ambientales que incluirán lo que está buscando pero también otras 121 variables que no está buscando.
El secreto es capturar las variables predeterminadas cuando gnome-terminal
se abre y restarlas de la lista de variables actuales para mostrar solo las nuevas variables.
Usandolistvar
Las instrucciones para crear la listvar
función se encuentran a continuación. Para ver cómo listvar
funciona la función, abra una terminal y escriba:
$ listvar
$ hey="Hey World :/"
$ listvar
declare -- hey="Hey World :/"
$ Word=Something
$ Number=25
$ Ubuntu=16.04
$ listvar
declare -- Number="25"
declare -- Ubuntu="16.04"
declare -- Word="Something"
declare -- hey="Hey World :/"
Creandolistvar
Añade esto al final de tu ~/.bashrc
:
# Below must be at end of ~/.bashrc
# Display newly created variables
function listvar () {
# Get current variable list
mapfile -t CurrVars <<< "$(declare -p)"
# Loop through each current variable
for CurrVar in "${CurrVars[@]}" ; do
# Skip over unwanted variables that are dynamic
[[ "$CurrVar" == "declare -a BASH_"* ]] && continue
[[ "$CurrVar" == "declare -a FUNCNAME"* ]] && continue
[[ "$CurrVar" == "declare -a PIPESTAT"* ]] && continue
[[ "$CurrVar" == "declare -- _=\"\""* ]] && continue
# [[ "$CurrVar" == "declare -- sh="* ]] && continue
# Skip over variables used in our listvar function
[[ "$CurrVar" == "declare -a SaveVar"* ]] && continue
[[ "$CurrVar" == "declare -- SaveVar"* ]] && continue
[[ "$CurrVar" == "declare -a CurrVar"* ]] && continue
[[ "$CurrVar" == "declare -- CurrVar"* ]] && continue
[[ "$CurrVar" == "declare -a OldVar"* ]] && continue
[[ "$CurrVar" == "declare -- OldVar"* ]] && continue
[[ "$CurrVar" == 'declare -- _="SaveV'* ]] && continue
[[ "$CurrVar" == 'declare -- _="listv'* ]] && continue
OldVar=false
for SaveVar in "${SaveVars[@]}" ; do
# Is current variable existing at time of save?
[[ "$CurrVar" == "$SaveVar" ]] && { OldVar=true ; break ; }
done
[[ $OldVar == false ]] && echo "$CurrVar"
done
} # listvar
# Empty array to prevent doubling everytime ~/.bashrc is resourced
SaveVars=()
# Save variable list before user creates new ones in shell
mapfile -t SaveVars <<< "$(declare -p)"
Guarde su ~/.bashrc
archivo y abra una nueva sesión de terminal para usar listvar
la función.