команда set без аргументов

команда set без аргументов

Я искал, 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 \[--'

не упоминается тот факт, что он по умолчанию печатает все функции оболочки, но, как вы обнаружили, и на это указали другие, он также печатает функции оболочки.

Связанный контент