Я искал, env
чтобы отобразить все переменные окружения. Я случайно дал команду, set
и она, кажется, "cat" скрипт на консоль. Почему это происходит?
Этотсправочная страницапохоже, не объясняет этого.
If no options or arguments are supplied, set displays the names
and values of all shell variables
решение1
set
— встроенная команда оболочки. Когда вы вводите ее в командной строке, вы видите все в вашей текущей среде. Это будет включать все загруженные вами функции. Обратите внимание, что большинство дистрибутивов включают по крайней мере несколько полезных функций в профили оболочки, и если у вас установлено дополнение bash, у вас их будет множество.
env
является двоичным файлом. Он загружается и выполняется оболочкой, как и любая другая команда. Поэтому он видит только те переменные среды, которые вы экспортировали, что должно исключить любые функции из вашей среды оболочки.
решение2
Как объяснил Фрэнк Шрайвер в своем комментарии, встроенная функция bash set
выведет все переменные оболочки (переменные, которые «существуют» только в этой среде выполнения) и всефункции оболочки тоже, снова функции, инициализированные и существующие в этом конкретном процессе оболочки.
Так, например, вы увидите такие функции, как
_tilde ()
{
...
}
которая является функцией, цель которой — обеспечить автодополнение по ~
символу для вашего редактора строк bash.
Действительно, даже документация bash для set
, которую можно просмотреть, выполнив команду
man bash | less '+/^\s*set \[--'
не упоминается тот факт, что он по умолчанию печатает все функции оболочки, но, как вы обнаружили, и на это указали другие, он также печатает функции оболочки.