Как отобразить все новые переменные после запущенного терминала?

Часто на терминальном сеансе я действительно наполняю как это:

$ Source="/bin"

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

$ echo $AllFiles
159

Это - утомительный ввод echo $Source сопровождаемый echo $AllFiles, и т.д. для отображения переменных я определил на текущем терминальном сеансе. Если я использую printenv мой экран заполнен материалом, который я не определил. Если я использую declare -p то же самое происходит.

Как я могу отобразить только переменные, которые я определил на этом терминальном сеансе?

0
задан 19 October 2019 в 07:21

1 ответ

declare -p покажет Вам ВСЕ переменные, определенные за пределами переменных окружения, которые будут включать то, что Вы ищете, но также и 121 другая переменная, которые Вы не ищете.

Секрет состоит в том, чтобы получить переменные по умолчанию когда gnome-terminal открывается и вычтите это из списка текущих переменных для отображения только новых переменных.

Используя listvar

Инструкции относительно создания listvar функция ниже. Видеть как listvar функционируйте работы открывают терминал и тип:

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

Создание listvar

Добавьте это в конец Вашего ~/.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

# Save variable list before user creates new ones in shell
mapfile -t SaveVars <<< "$(declare -p)"

Сохраните Ваш ~/.bashrc файл и открытый новый терминальный сеанс для использования listvar функция.

0
ответ дан 22 December 2019 в 00:17

Другие вопросы по тегам:

Похожие вопросы: