Wie werden alle neuen Variablen angezeigt, nachdem das Terminal gestartet wurde?

Wie werden alle neuen Variablen angezeigt, nachdem das Terminal gestartet wurde?

In einer Terminalsitzung mache ich häufig folgende Dinge:

$ Source="/bin"

$ AllFiles=$(ls $Source/* | wc -l)

$ echo $AllFiles
159

Es ist mühsam, echo $Sourcegefolgt von echo $AllFilesusw. einzutippen, um die Variablen anzuzeigen, die ich in der aktuellen Terminalsitzung definiert habe. Wenn ich verwende, printenvist mein Bildschirm mit Dingen gefüllt, die ich nicht definiert habe. Wenn ich verwende, declare -ppassiert dasselbe.

Wie kann ich in dieser Terminalsitzung nur die Variablen anzeigen, die ich definiert habe?

Antwort1

declare -pzeigt Ihnen ALLE außerhalb der Umgebungsvariablen definierten Variablen an. Dazu gehören die von Ihnen gesuchten Variablen, aber auch 121 andere Variablen, nach denen Sie nicht suchen.

Das Geheimnis besteht darin, beim Öffnen die Standardvariablen zu erfassen gnome-terminalund diese von der Liste der aktuellen Variablen abzuziehen, um nur die neuen Variablen anzuzeigen.

Verwenden vonlistvar

Anweisungen zum Erstellen der listvarFunktion finden Sie weiter unten. Um zu sehen, wie die listvarFunktion funktioniert, öffnen Sie ein Terminal und geben Sie Folgendes ein:

$ 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 :/"

Erstellenlistvar

Fügen Sie dies am Ende Ihres hinzu ~/.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)"

Speichern Sie Ihre ~/.bashrcDatei und öffnen Sie eine neue Terminalsitzung, um listvardie Funktion zu nutzen.

verwandte Informationen