Недооцененные CDPATH и TMOUT

CDPATH - PATH для cd
О переменной окружения CDPATH многие знают, но недооценивают. А между тем эта переменная выполняет теже действия что и переменная PATH, но для команды cd.
Т.е. если CDPATH=".:~:~/all", то вводя cd help мы попадем в help если он существует в текущей директории, иначе проверяется следующее значение ~ (домашний каталог) и если в ней есть необходимый нам каталог то мы попадаем в него, и так далее по всем путям в переменной CDPATH. Работает как в bash так и в zsh, к тому же в zsh автодополнение определяет нужный нам путь сразу во всех директорях указанных в переменной (возможно при использовании bash-completion такое автодополнение и в bash).

TMOUT - время бездействия
О TMOUT знают почему-то не многие, но те кто знают ценят.
В общем установив переменной значение большее нуля вы заставите zsh(и bash тоже) завершить свою работу по истечении указанного количества секунд, если в течении этого времени не будет ничего введено.
Ради безопасности я внес ей в рутовый конфиг zsh, и устанавливаю на серверах куда захожу по ssh - на всякий случай.
jetxee 09-02-2009
Про CDPATH очень полезно! Попробовал — работает и в bash. В том числе и автодополнение! Спасибо.
lupin.de.mid@gmail.com 09-02-2009
С TMOUT как то очень грустно будет запускать что то в screen?
muhas 09-02-2009
если при использовании TMOUT запущена какая-либо команда то шелл не завершает свою работу. А в screen поможет не держать пустые(в которых ничего не запущено) окна - т.е. если хоть в одном окне что-то запущено сам screen не завершит свою работу
unixh0rn 10-09-2010
Кстати, вопрос к уважаемым братьям по shell-у - не сталкивались, как можно __принудительно__ завершать сессии по таймауту, если команда запущена, но юзер при этом __сам__ команд не выполняет?
За время игрищ с TMOUT на bash (Fedora12, bash-4.0.33-1.fc12.i686) обнаружил следующие забавные (но нерадостные для безопасника) моменты:
1. Если прописать в /etc/profile строки
TMOUT=60
readonly TMOUT
export TMOUT
то в принципе все работает, НО! особо хитрый юзер может спеть консольную мантру
exec sh -c 'unset TMOUT; bash'
и сбросить значение этой переменной.
Вместо readonly можно указать хоть "declare -r", хоть "typeset -r" - все равно не работает.
2. Пункт №1 аннигилируется, если админ пропишет те же строки не в /etc/profile, а в /etc/bashrc
3. Даже если выполняем п.№2, то все равно выполняющаяся команда (top, vmstat 1, while true; do date; sleep 30; date, да все что угодно) не позволяет шеллу выкинуть юзера из системы.

Вопрос - можно ли как-то заставить шелл принудительно обрывать выполняющиеся команды, если время бездействия пользователя превысило допустимое значение ?
muhas 10-09-2010
sleep x && kill y =)

ну или в том же скрине блокировать экран по истечению какого-то времени