Перейти к содержимому

Как мне сбросить или избавиться от функции bash?

17

Если вы установите или экспортируете переменную окружения в bash, вы можете отменить ее. Если вы установите псевдоним в bash, вы можете удалить его. Но, кажется, не работает .

Рассмотрим эту (тривиальную) функцию bash, например, установите в файле .bash_aliases и прочитайте при инициализации оболочки.

function foo () { echo "bar" ; } 

Как я могу удалить это определение функции из моей текущей оболочки?
(Изменение файлов инициализации или перезапуск оболочки не учитываются.)

5 736 просмотров
quack quixote спросил 16 лет назад
Q 34 957

2 ответа

28
Принятый ответ

Снята с охраной встроенной команды принимает параметр, -fдля функции удаления:

unset -f foo 

Сформируйте неустановленную запись в man-странице bash :

Если указан -f, каждое имя относится к функции оболочки, и определение функции удаляется.

Примечание: -fдействительно необходимо, только если существует переменная с тем же именем. Если у вас также нет переменной с именем foo, то unset fooудалит функцию.

это то, чего мне не хватало я нашел параметр -f в * export *, но не нашел его в * unset *. Благодарю.

quack quixote · 16 лет назад · 0

@XavierStuvw: unset не является внешней командой, это часть оболочки (* bash * в данном случае); попробуйте man bash и найдите запись для unset (управление довольно большой, unset находится в разделе Shell Builtin Commands.

Chris Johnsen · 9 лет назад · 1
Chris Johnsen ответил 16 лет назад
C 27 653
2

Смотрите help unset:

unset: unset [-f] [-v] [-n] [name ...]  Unset values and attributes of shell variables and functions.  For each NAME, remove the corresponding variable or function.  Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references  Without options, unset first tries to unset a variable, and if that fails, tries to unset a function.  Some variables cannot be unset; also see `readonly'.  Exit Status: Returns success unless an invalid option is given or a NAME is read-only. 

Там нет unset --helpни, man unsetк сожалению.

Здесь нет man unset, потому что это команда built-in, а для команд built-in вместо нее help. Для некоторой команды built-in также существует внешний исполняемый файл. В случае сомнений попробуйте, например, type mycommnad. Например type unset и он ответит вам unset - встроенная оболочка. Если вы хотите узнать, существует ли исполняемый файл, попробуйте which echo (еще один вход), и он скажет, где он находится. --Option_long типично для исполняемой команды. Попробуйте echo --help и / bin / echo --help. `` :-).

Hastur · 9 лет назад · 3

@Hastur Не стесняйтесь добавлять свой комментарий к ответу, редактируя его хвост. Если рецензенты одобрят это, вы получите 2 балла.

XavierStuvw · 9 лет назад · 0

... спасибо за мысль Ксавье: это было больше для вас, чем завершить ответ; Я думаю, вы пропустили, что это была команда built-in, и для них вы должны использовать help вместо man. (Не совсем так, потому что вы найдете их в man bash в главе SHELL BUILTIN COMMANDS или непосредственно в man BASH-BUILTINS ...). Удобно, что в оболочке bash вы можете просто попросить help и получите список команд built-in:-). (Попробуйте help help и man man тоже).

Hastur · 9 лет назад · 0

@Hastur Вы можете завершить ответ на благо всех читателей. Затем мы можем удалить комментарии, чтобы избавиться от мелкого шрифта.

XavierStuvw · 9 лет назад · 0
XavierStuvw ответил 9 лет назад
X 172