[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: каталог после выхода из MC



On 2009.10.09 at 02:18:57 +0800, antilopa_gnu@list.ru wrote:

> Здравствуйте!
> 
> Midnight commander в lenny 5.02 ведет себя несколько непривычно:
> запускаю mc, перехожу в какой-нибудь другой каталог, завершаю
> работу mc -- и текущим каталогом оказывается снова тот, в котором
> mc был запущен.
> 
> Можно ли (и как?) изменить это поведение на более привычное -- чтобы
> после выхода из mc текущим каталогом оказывался тот, в который я в
> mc перехожу?

Нужно у себя в профайле (~/.bash_profile) добавить строчку

. /usr/share/mc/bin/mc.sh 

Это, между прочим, в man mc написано.
Хотя нет, там же alias, лучше в .bashrc, а не .bash_profile

Теперь про то как это работает.

Текущая директория в Unix - свойство процесса. Поэтому процесс,
запущенный из shell не имеет никаких штатных способов сообщить этому
shell что он поменял в процессе работы директорию и на какую.

Поэтому когда ты завершаешь mc и возвращаешься в тот шелл, откуда его
запустил, текущей директорией у этого шелла будет та же самая, что была
до запуска mc.


Поэтому у mc предусмотрен ключик -p, который позволяет записать в момент
выхода текущую директорию в файл. 

Благодаря этому мы можем запускать mc из шелловской функции или алиаса
(благо и то, и другое выполняетя в текущем шелле и способно поменять
ему текущую директорию), которая запустит mc, добавив в командную строку
этот ключик, а потом прочитает файлик и сделает туда cd.

Надо сказать, реализация, данной функциональности, входящая в пакет mc
из lenny мне показалась безумно кривой.

1. Почему alias, а не шелловская функция? Алиас нужно в каждом шелле
определять заново, а шелловскую функцию можно экспортировать как и
переменную среды.

2. Алиас реализован как зачитывание (командой точка) файлика
mc-wrapper.sh 
Ну это понятно. Если мы не умеем писать функции, значит справиться с
чтением файлика из той же команды мы не сможем.

3. Писать файлик в общий /tmp как-то несекьюрно. Почему бы не в ${HOME}
текущего пользователя? 

4. Про наличие у команды id ключиков -u и -n авторы скрипта как-то не в
курсе. Вместо этого парсят вывод id sed-ом. Хотя я б вообще скорее
переменной LOGNAME воспользовался. А ведь эти ключики поддерживаются
даже в Solaris (правда, там правильный id лежит там же, где правильный
sed и правильный grep, и это где-то - ни разу не /usr/bin).


5. Ну и test дергать два раза вместо того чтобы использовать его опцию
-a....


> 
> -- 
> To UNSUBSCRIBE, email to debian-russian-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
> 


Reply to: