Как удалить функции, отображаемые командой set? [duplicate]

Предыдущие ответы не работают для нескольких устройств или для устройств с идентичными UUID.

Попробуйте следующее:

sudo blkid /dev/sd*
8
09.03.2019, 16:52
4 ответа

Хотя самым простым решением является использование env вместо set , env не 'не передавать все существующие переменные, а только те, которые будут переданы любому процессу, запущенному с env (так что никаких неэкспортируемых переменных, например). Другой подход заключается в поиске в выводе набора строк, содержащих строку без пробелов, = , а затем другую строку символов без пробелов:

set | grep -E '^\S+=\S' 

Однако это пропустит любые переменные, для которых задано многострочное значение (например, IFS , значение по умолчанию которого включает \ n ).

4
27.01.2020, 20:08

По какой-то странной причине, declare -p , кажется, перечисляет только переменные:

$ declare -p
declare -x ANT_HOME="/usr/share/apache-ant"
declare -- BASH="/usr/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -A BASH_CMDS=()
...

Конечно, это имеет тот недостаток, что он выводит объявить команды, которые могут воссоздать переменную со всеми ее атрибутами. В зависимости от того, что вы собираетесь делать с выводом, это может быть действительно полезно.

3
27.01.2020, 20:08

Я не уверен, но корова что-нибудь подумает.

 _____
( env )
 -----
        o   ^__^
         o  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Другими словами, просто используйте вместо него env .


Я думаю, она только что прочитала комментарий Джиллиагре.

 ________________________________
/ But it will only show exported \
\ variables!                     /
 --------------------------------
        \   ^__^
         \  (!!)\_______
            (__)\       )\/\
             !! ||----w |
                ||     ||
2
27.01.2020, 20:08

Как я уже сказал в комментарии env не соответствует требованиям, поскольку показывает только экспортированные переменные.

Обработка набора вывода для фильтрации всего, что не похоже на определение переменной, является ненадежным взломом. В частности, вы пропустите часть переменных, значение которых содержит перевод строки. Хуже того, тщательно написанная функция может создать впечатление фальшивых определений переменных.

Самым простым решением является временное переключение в режим POSIX, в котором функции не считаются (своего рода) переменными:

set -o posix
set
set +o posix

Однако существует проблема, если вашим режимом по умолчанию уже является POSIX или если вы хотите, чтобы эта команда выполнялась работать в любом режиме POSIX, который установлен в оболочке.

В таком случае есть обходной путь:

(set -o posix;set)

Это только устанавливает режим POSIX для набора , встроенного, выполняемого в подоболочке, и режим родительской оболочки остается неизменным.

15
27.01.2020, 20:08

Теги

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