Алиасы doskey при использовании другого ComSpec
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
У меня в doskey.ini бол-во алиасов - это cd в какие-то часто используемые директории. Не знаю, может кому удобнее через folder history и поиск это делать, или через user menu к примеру, а мне нравится через комстроку, например `klx=cd d:\dropbox\doc\vehicles\motorbike\klx250`. Хочу сменить ComSpec на bash. Переписывать эти cd-алиасы в rcfile bash-а бесполезно, ведь cd фар сам должен делать. Так что возможность эта насовсем теряется, при использовании любого другого ComSpec, чем стандартный.
Может быть это даже баг? Я, если честно, не совсем понимаю, когда у меня на старте фара выполняется doskey /macrofile=/path/to/doskey.ini, то какой шелл это всё дело исполняет, и каким образом алиасы становятся доступны в фаре. И почему они перестают быть доступны при использовании другого ComSpec. Просветите!
Может быть это даже баг? Я, если честно, не совсем понимаю, когда у меня на старте фара выполняется doskey /macrofile=/path/to/doskey.ini, то какой шелл это всё дело исполняет, и каким образом алиасы становятся доступны в фаре. И почему они перестают быть доступны при использовании другого ComSpec. Просветите!
Алиасы doskey при использовании другого ComSpec
Doskey просто сохраняет список алиасов для текущего консольного окна.
Фар выполняет «разворачивание» алиасов, когда вы их вводите в ком.строке фара.
При чём тут проблемы с другими комспеками - не понятно
Фар выполняет «разворачивание» алиасов, когда вы их вводите в ком.строке фара.
При чём тут проблемы с другими комспеками - не понятно
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
Я не оч понимаю, где именно хранятся алиасы. В консольном окне? В фаре? В долгоиграющем cmd, запущенном из-под фара (вряд ли...)?
Проблема такая, при старте фара грузится doskey.ini, в нём например `klx=cd d:\dropbox\doc\vehicles\motorbike\klx250`
ComSpec стоит стандартный.
Пишу на консоли klx, фар переходит в нужную директорию.
Если же сделать
set comspec=c:\usr\bin\bashcmd.sh
И после этого klx, то алиас не разворачивается, а передаётся comspec-у, который о нём не знает, а даже если б знал, проку б не было, он же не может поменять рабочую директорию родителю (фару).
Проблема такая, при старте фара грузится doskey.ini, в нём например `klx=cd d:\dropbox\doc\vehicles\motorbike\klx250`
ComSpec стоит стандартный.
Пишу на консоли klx, фар переходит в нужную директорию.
Если же сделать
set comspec=c:\usr\bin\bashcmd.sh
И после этого klx, то алиас не разворачивается, а передаётся comspec-у, который о нём не знает, а даже если б знал, проку б не было, он же не может поменять рабочую директорию родителю (фару).
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Алиасы doskey при использовании другого ComSpec
Если вы внимательно посмотрите на свой doskey.ini, особенно на его начало, то вам станет понятно, почему так происходит.
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
Я знаю, что там у него в начале, но мне всё равно непонятно, как оно всё работает, где именно хранятся эти алиасы при загрузке, и каким образом фар разворачивает те алиасы, которые `cd ...`, до выполнения команды. Ведь фар не doskey, и не cmd.exe, как он тогда может это делать? И почему это перестаёт работать при прописывании другого ComSpec?DrKnS wrote:Если вы внимательно посмотрите на свой doskey.ini, особенно на его начало, то вам станет понятно, почему так происходит.
Так, добавил в начале файла следующее
Code: Select all
[bashcmd.sh]
klx=cd d:\dropbox\doc\vehicles\motorbike\klx250
Помимо варианта изменять comspec в самом макросе, который грузит doskey macrofile, что ещё можно сделать?
Ещё замечание, я использую вот этот макрос про алиасы - http://forum.farmanager.com/viewtopic.php?f=60&t=8546
Так вот, алиасы на редактирование и перезагрузку алиасов там генерятся макросом и добавляются динамически.
Чтоб оно работало, надо заменить запуск `doskey` на `doskey /exename=bashcmd.sh`
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Алиасы doskey при использовании другого ComSpec
В консольном хосте. Это, чтобы было понятно, окно, в котором могут жить несколько процессов - фар, цмд, баш и т. п.
Вангую, в начале у вас там [cmd.exe], что означает, что всё, что ниже, предназначено для процесса с именем cmd.exe.gene.pavlovsky wrote:Я знаю, что там у него в начале
Фар, в принципе, не обязан использовать эту секцию. Он должен использовать только свою - [far.exe].
Но мы заботимся о пользователях и, если в своей секции ничего подходящего не нашлось, проверяем еще и ту, которая соответствует текущему комспеку, предполагая, что пользователь бы, наверное, именно этого и хотел.
В вашем случае изначально комспек был установлен в cmd.exe. Вы пишете свой "klx", фар его не находит среди своих, но находит у комспека, всё работает. Потом вы внезапно назначаете любимой женойкомспеком баш, но алиасы по прежнему остались у cmd.exe, а cmd.exe для фара теперь никто и его манатки никого, кроме него самого, не интересуют.
"Что делать" - думаю, очевидно.
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
Спасибо, что разъяснили, никогда б не подумал, что в самом конхосте есть фича алиасов. Мне как юниксоиду это весьма странно. Значит, doskey общается с консольным хостом, а не с программой, которая внутри консоли выполняется (Far, cmd, bash ...). И когда фар анализирует комстроку, он читает список алиасов из конхоста, и проверяет, не алиас ли команда. Также проверяет, не встроенная ли команда (lua:, lm:, far:, ещё что-то?). Дальше ищет по Path. И в конце концов если ничего нигде не нашлось, посылает на выполнение комспеку. Так? А каким образом фар решает, что например `ls -l` выполнять без комспека, а `ls -l | less` - через комспек? По регулярному выражению тестируется выхождение за рамки ограниченного набора символов?
Поменял [cmd.exe] на [Far.exe], теперь алиасы доступны из-под обоих шеллов.
Добавил для удобства ещё такой алиас, если захочется динамически создавать какие-то алиасы.
`alias=doskey /exename=Far.exe`
А то doskey без аргументов по умолчанию создаёт алиасы для cmd.exe.
Макрос Alias (автор John Doe) подправил тоже, чтоб в Far.exe автогенерил свои макросы для перезагрузки и редактирования алиасов: http://forum.farmanager.com/viewtopic.p ... 65#p137365
Поменял [cmd.exe] на [Far.exe], теперь алиасы доступны из-под обоих шеллов.
Добавил для удобства ещё такой алиас, если захочется динамически создавать какие-то алиасы.
`alias=doskey /exename=Far.exe`
А то doskey без аргументов по умолчанию создаёт алиасы для cmd.exe.
Макрос Alias (автор John Doe) подправил тоже, чтоб в Far.exe автогенерил свои макросы для перезагрузки и редактирования алиасов: http://forum.farmanager.com/viewtopic.p ... 65#p137365
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Алиасы doskey при использовании другого ComSpec
В общих чертах так, да.
Если есть пайп, перенаправление, экранирование и т. п. то это уходит в комспек сразу, иначе - если не смогли найти самостоятельно.
Рекомендую на досуге посмотреть cmdline.cpp / execute.cpp, там не рокет сайнс, разобраться можно.
Если есть пайп, перенаправление, экранирование и т. п. то это уходит в комспек сразу, иначе - если не смогли найти самостоятельно.
Рекомендую на досуге посмотреть cmdline.cpp / execute.cpp, там не рокет сайнс, разобраться можно.
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
По-моему, я нашёл баг. В bash есть конструкция `[ ... ]` (conditional expression), а в Cygwin так ж есть команда `[.exe`, выполняющая такую же ф-цию - наверно, для каких-то скриптов не на shell-е. В общем, пробую ради забавы выполнить данную команду через свой ComSpec:
`[ $TERM ] && echo "TERM=$TERM" || echo "TERM is undefined"`
На вход ComSpec приходит `C:cygwinbin[.EXE $TERM ] && echo TERM=$TERM || echo TERM`, в пути до [.exe нету слэшей.
Наверно, [ запарывает работу какого-то регулярного выражения?
Для сравнения, [.exe и test.exe примерно одно и то же, лежат в той же директории, `test $TERM && echo "TERM=$TERM" || echo "TERM is undefined"` работает как надо.
Прекрасно! Сурсы, прекрасно, именно их мне и хотелось ) Завтра почитаю за обедом.
`[ $TERM ] && echo "TERM=$TERM" || echo "TERM is undefined"`
На вход ComSpec приходит `C:cygwinbin[.EXE $TERM ] && echo TERM=$TERM || echo TERM`, в пути до [.exe нету слэшей.
Наверно, [ запарывает работу какого-то регулярного выражения?
Для сравнения, [.exe и test.exe примерно одно и то же, лежат в той же директории, `test $TERM && echo "TERM=$TERM" || echo "TERM is undefined"` работает как надо.
Прекрасно! Сурсы, прекрасно, именно их мне и хотелось ) Завтра почитаю за обедом.
-
- Posts: 90
- Joined: Fri 02 Dec, 2005 20:47
- Location: Москва
- Has thanked: 4 times
- Been thanked: 2 times
Алиасы doskey при использовании другого ComSpec
1. doskey.exe при запуске в bash.exe выдаёт "ошибка в макросе", возможно надо экранировать "/" в параметрах запуска и в самих макросах
2. заголовок в файле сохраненных макросов не имеет значения, в powershell.exe отрабатывает без замечаний (даже если там [fake.exe])
3. открытие нового окна убивает макросы (если через start (без /b))
-
- Posts: 170
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 11 times
- Been thanked: 9 times
- Contact:
Алиасы doskey при использовании другого ComSpec
MDM,
1. У меня из bash `doskey /exename=Far.exe l=ls -l` работает без ошибок. Что именно у вас выдаёт ошибку в макросе?
2. Я не знаю про powershell, в моём случае когда было cmd.exe, то при стандартном ComSpec работали алиасы, при использовании стороннего (мой скрипт bashcmd.sh) - не работали. Поменял на Far.exe, работают и там, и там. Я так понимаю, что консольный хост хранит алиасы по группам, а программа, работающая в консоли, может запрашивать лишь свои собственные алиасы, какие-либо конкретно чужие (скажем, как сказано было выше, Far использует [Far.exe] И [cmd.exe], но не [fake.exe], хоть вообще все - наверно, ваш случай с powershell.
3. Новое окно в новой консоли - логично, что алиасы исчезают. У меня они грузятся при старте фара через
Macro { description="Aliases: Load on start";
area="Shell"; key="auto"; flags="RunAfterFARStart";
action=Reload;
}
где Reload - определённая выше ф-ция, выполняющая doskey /macrofile=...
1. У меня из bash `doskey /exename=Far.exe l=ls -l` работает без ошибок. Что именно у вас выдаёт ошибку в макросе?
2. Я не знаю про powershell, в моём случае когда было cmd.exe, то при стандартном ComSpec работали алиасы, при использовании стороннего (мой скрипт bashcmd.sh) - не работали. Поменял на Far.exe, работают и там, и там. Я так понимаю, что консольный хост хранит алиасы по группам, а программа, работающая в консоли, может запрашивать лишь свои собственные алиасы, какие-либо конкретно чужие (скажем, как сказано было выше, Far использует [Far.exe] И [cmd.exe], но не [fake.exe], хоть вообще все - наверно, ваш случай с powershell.
3. Новое окно в новой консоли - логично, что алиасы исчезают. У меня они грузятся при старте фара через
Macro { description="Aliases: Load on start";
area="Shell"; key="auto"; flags="RunAfterFARStart";
action=Reload;
}
где Reload - определённая выше ф-ция, выполняющая doskey /macrofile=...
Алиасы doskey при использовании другого ComSpec
Я не фонат алиасов, но если надо, то почему не использовать сам far для разворачивания сокращений, независимо от комспека, это и макросом ИМХО можно сделать, я пользуюсь своим, и вроде норм: всякие cd и exec комплексно исполняет.
немного непривычно может показаться поначалу записать алиас...
у меня около десятка алиасов реализованных в фаре типа cd... и чуть больше конвеерного запуска - типа запусти это потом это, а затем это.
доскей на каждой машине свой, а вот макрос можно вместе с фаром таскать.
немного непривычно может показаться поначалу записать алиас...
у меня около десятка алиасов реализованных в фаре типа cd... и чуть больше конвеерного запуска - типа запусти это потом это, а затем это.
доскей на каждой машине свой, а вот макрос можно вместе с фаром таскать.
SimSU ··· ·· -- ··· ··-