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: