View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003345 | Far Manager | Command Line/Execute | public | 2016-11-09 17:33 | 2016-11-11 11:55 |
Reporter | heilong | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 3.0 | ||||
Summary | 0003345: При запуске xxx фар пытается выполнить файл xxx, тогда как имеется xxx.exe | ||||
Description | Стоит у меня `C:\Program Files\nodejs\node.exe`. Путь добавлен в Path. Пишу на командной строке `node` - запускается. В cygwin-е у меня есть некоторый скрипт на node, которые вызывается из-под cron-а. У cron-а свой path, ограниченный cygwin-скими директориями. Так что я взял и создал symlink `C:/cygwin/usr/local/bin/node` -> ``C:\Program Files\nodejs\node.exe` Стало быть, cron скрипт заработал. Но теперь я пишу в фаре `node`, и получаю
Надо заметить, что `C:\cygwin\usr\local\bin` в Path у меня первее, чем путь к nodejs. Но с чего Far-у пробовать запускать `node` без .exe? Он же не знает, как его запускать? Понятное дело, Винда не знает, как запускать файл без расширения. Зачем пытаться? Заметил я эту проблему только сейчас (3.0.0.4833), по-моему раньше её не было. Но не берусь утверждать, т.к. редко запускаю node из Фара. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Start - Run - node что говорит? |
|
Успешно запускает `C:\Program Files\nodejs\node.exe` |
|
А C:\cygwin\usr\local\bin в глобальном path или только для Far? |
|
В глобальном path. Win+R > cmd node - запускается C:\>C:\cygwin\usr\local\bin\node 'C:\cygwin\usr\local\bin\node' is not recognized as an internal or external command, operable program or batch file. |
|
> Win+R > cmd Я спрашивал про случай без cmd, т. е. node прямо там в диалоге. Экспериментирую у себя, если из WinR запускать без расширения и в path находится сначала файл без расширения - берётся он. Фар ведёт себя так же. |
|
Да я оба случая проверял. Щас ещё попробовал всякое разное. Результаты такие C:\Windows\System32\nodetest1 -> C:\Program Files\nodejs\node.exe (SYMLINK) C:\cygwin\usr\local\bin\nodetest2 -> C:\Program Files\nodejs\node.exe (SYMLINK) Win+R > nodetest1: Показывается диалог "Open with" Win+R > nodetest2: Запускается C:\Program Files\nodejs\node.exe - волшебство Cygwin-овской магической директории? Win+R > cmd: nodetest1/nodetest2: ... is not recognized ... Far: тоже, что и cmd В общем, Фар ведёт себя так же, как и Винда. Не хуже. Но может ведь лучше? Есть ли какой-то смысл пытаться запускать файл без расширения? Я понимаю, если б юзер сказал конкретно ./noext-file или C:\path\to\noext-file, но найти данный файл в Path и пробовать его запускать это по-моему бессмысленно. Имхо, может запуск файлов без расширения заблокировать (или делать только при указании полного пути)? Ещё лучше б конечно поддержку shebang добавить, правда всё равно ведь Фар не поймёт, что такое /bin/sh и где его искать. Вообще меня всегда очень печалило, что в Винде нельзя назначить какой-то единый обработчик для файлов без расширения. Если б это было возможно, давно уже кто-нибудь написал бы какой-нибудь скрипт, который бы мог запускать sh/perl/python/awk/... скрипты без расширения (в Cygwin-е скажем полно sh скриптов без расширения). Но вот я подумал - в Винде нет такой фичи, но ведь в Фар можно добавить. |
|
Почему не создать там полноценный windows-симлинк "node.exe"? |
|
Да можно и так сделать. Но неаккуратненько как-то :) Для винды уже есть оригинальный node.exe. А чисто для Cygwin-а .exe добавлять вроде как лишнее (хоть он его и переварит). По-любому, этот багрепорт не о node или как решить конкретную легко решаемую разными обходными путями проблемку. Именно предлагаю рассмотреть общий случай попытки direct run-а файла без расширения. Не заведомо ли тщетна такая попытка вообще? Да, винда предлагает (единоразово) диалог, что делать с этим файлом. Допустим, можно выбрать notepad и просмотреть файл. Не очень-то это и удобно. Есть какая-то иная польза от этого? Вообще, когда команда some_file ищется по Path&PathExt, предположим, где-то в пути нашёлся файл some_file без расширения. Вижу два реалистичных варианта, что это за файл: 1) Некий sh/py/pl/awk/sed/... скрипт без расширения (допустим, изначально скрипт под UNIX, где такое - не редкость, но т.к. написан на кроссплатформенном скрипт-языке, может работать и под Виндой, либо под Cygwin-ом). Хорошо бы это понять и выполнить его. 2) Просто какой-то файл без расширения, случайно оказавшийся с таким именем. Если не через direct run, то: 1) Ничего не делать, не считать этот файл как исполняемый вариант. Тогда поиск по Path&PathExt продолжится дальше - глядишь, чего-нибудь более удобоваримое найдётся. Если ничего так и не находится - ошибка "команда не найдена", как обычно. Это самый простой и надёжный вариант, по-моему. 2) Запускать команду через ComSpec. В случае с (cygwin && (comspec == bash)) это прокатит, и если файл - скрипт с shebang-ом, то он выполнится. Но если это левый файл без расширения, то Cygwin с ним также ничего не поделает. Тогда как где-то в другом пути из Path есть реально исполняемый файл с таким именем. Некая доп. фича, полезная только bash-любителям вроде меня (есть ли ещё такие?), в ущерб надёжности. 2a) Фар может проверить - если файл текстовый, и присутствует shebang, запускать через внешнией обработчик, заданный в far:config. Скажем юзер может использовать стандартный ComSpec для работы в Фаре, но тем не менее иметь установленный cygwin/msys/git for windows, и желать, чтоб sh/bash/... из их состава исполнял скрипты без расширения. 3) Самый мощный вариант - и больше всего работы - список типов файлов (интерфейс примерно как сейчас Files highlighting) - каждый паттерн позволяет задать регэксп по файлу, и обработчик для данного типа файла. К примеру, item в данном списке: regexp "^#/bin/awk\n" (если регэксп по всему файлу, а не построчно) - action "C:\path\to\awk.exe -f !.!" (или может `!`). Полагаю, работы немало, и вряд ли это много кому нужно... Мне нравятся варианты 1 и 2а. В идеале оба варианта поддерживаются - если внешний обработчик в far:config задан, юзать вариант 2а, если не задан (дефолт) - юзать вариант 1. |
Date Modified | Username | Field | Change |
---|---|---|---|
2016-11-09 17:33 | heilong | New Issue | |
2016-11-09 19:25 | DrKnS | Note Added: 0014979 | |
2016-11-09 19:28 | heilong | Note Added: 0014980 | |
2016-11-09 19:31 | DrKnS | Note Added: 0014981 | |
2016-11-09 20:12 | heilong | Note Added: 0014983 | |
2016-11-09 20:47 | DrKnS | Note Added: 0014984 | |
2016-11-09 22:37 | heilong | Note Added: 0014985 | |
2016-11-11 10:15 | JohnDoe | Note Added: 0014986 | |
2016-11-11 11:55 | heilong | Note Added: 0014989 |