¿Cómo mostrar todas las variables nuevas después de que se inicia la terminal?

¿Cómo mostrar todas las variables nuevas después de que se inicia la terminal?

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 $Sourceseguido de echo $AllFiles, etc. para mostrar las variables que he definido en la sesión actual del terminal. Si uso printenvmi pantalla se llena de cosas que no definí. Si lo uso declare -ppasa lo mismo.

¿Cómo puedo mostrar solo las variables que he definido en esta sesión de terminal?

Respuesta1

declare -ple 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-terminalse abre y restarlas de la lista de variables actuales para mostrar solo las nuevas variables.

Usandolistvar

Las instrucciones para crear la listvarfunción se encuentran a continuación. Para ver cómo listvarfunciona 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 ~/.bashrcarchivo y abra una nueva sesión de terminal para usar listvarla función.

información relacionada