Может кто-нибудь объяснить, как exit
работает команда в Unix-терминале?
Поиск man exit
и which exit
не был полезен, и я столкнулся со следующей проблемой.
После установки пакетов add on для Anaconda и PyCharm в моей новой системе Red Hat я заметил, что при каждом вызове exit
для выхода из сеанса терминала я получаю серию ошибок, а затем терминал завершает работу, как и ожидалось. Кажется, ошибки указывают на то, что мой вызов exit
вызывает вызов rm ~/anaconda3/.../
и rm ~/PyCharm/....
вызывает ошибку. Все каталоги также являются местоположениями пакетов, которые я скачал для этих программ (то есть numpy), см. Ниже.
$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...
Постановили
В моем ~/.bash_logout
файле была строка
find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;
Комментирование этой строки прекратило сообщения об ошибках. Похоже, для поиска и удаления всех временных файлов. Но он также пытается найти каталоги со словом «ядро» и удалить их. Это было предустановкой в системе.
источник
exit
выходе из этого терминального сеанса - или это происходит каждый раз, когда вы используете егоexit
после этого?exit
является ли псевдоним?core
файлы, заключается в том, что они обычно представляют собой файлы аварийного отключения ( дампы ядра ), которые занимают место, но редко полезны, если вы не разрабатываете программное обеспечение, вызывающее сбой. В этом случае он пытается удалить каталог с именемcore
, который терпит неудачу (и хорошо, что он терпит неудачу -numpy.core
это важно для NumPy!).ulimit -c 0
по умолчанию). Вfind -exec rm
любом случае, я не хочу эту команду, но вы можете добавить-type f
к ней. Вы также можете сделать намного более эффективным удаление нескольких файлов, используя-exec rm {} +
вместо этого... \;
, чтобы он объединял несколько аргументов в однуrm
командную строку (например, xargs)Ответы:
Обычно вы можете увидеть выполнение только после выхода из оболочки, если вы настроили это вручную. Но, возможно, один из установленных вами пакетов поставляется со скриптом оболочки bash exit ...
проверить;
может быть, вы найдете вызов сценария оттуда, это странный ...
источник
find -xdev ...
.man bash
Такие ловушки часто используются для очистки tmp-файлов при выходе, см. Https://stackoverflow.com/questions/687014/removing-created-temp-files-in-unexpected-bash-exit
Определите выходную ловушку следующим образом (для лучшего тестирования в новой оболочке):
Показать определенную ловушку EXIT:
Тестовое задание:
Обратите внимание, что это также
exit
может быть вызвано неявно. Таким образом, вместоexit
вас, возможно, также запустили ловушкуkill -HUP $$
.источник
type -a exit
->exit is a shell builtin
это то, как вы знаете, как читать man-страницу bash (или запускатьhelp exit
вместо man) в первую очередь.Команда
exit
представляет собой специальную встроенную команду в оболочках. Он должен быть встроенным, поскольку он необходим для выхода из процесса оболочки.Он выходит из оболочки с предоставленным статусом выхода, если какая-либо из команд последней или иным образом.
После выхода оболочка будет запускать
EXIT
ловушки, если таковые имеются. Смотрите выходные данныеtrap
(в оболочках типа Bourne) для текущих установленных.Со многими оболочками, если оболочка была вызвана в качестве регистрационной оболочки (некоторые системы / пользователи настраивают эмуляторы терминалов для запуска входа в оболочке), он также будет работать код , хранящийся в специальных файлах , такой как
~/.logout
,~/.zlogout
,~/.bash_logout
и , возможно , соответствующие них в/etc
зависимости от оболочки ,Вы можете сделать
set -x
перед вызовом,exit
чтобы получить представление о том, откуда запускаются эти команды.источник
set -x
set -x
вывода, запустив bash таким образом, чтобы не очистить или не закрыть терминал после его выхода, или, возможно, выполнивset -x
, аexec &> exit_log.txt
затем набрать вслепуюexit
.exit
это встроенная команда bash, поэтому неудивительно, что онаman exit
не помогает.Надлежащую документацию можно получить на страницах руководства
man bash
или с помощью встроенной командыhelp
bash (help exit
).Если вы действительно хотите знать, как это работает, взгляните на источник: http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4.
источник