Как пометить командные файлы как исполняемые файлы в bash / cygwin?
1822
Mark
В своем стремлении улучшить свой опыт работы в среде Windows 7 я установил Cygwin и начал использовать mintty в качестве инструмента интерфейса командной строки. Это было приятно и возвращает меня к более продуктивным дням работы в среде Unix.
Однако есть одна досадная вещь: я не могу правильно работать. Пакетные файлы (т. Е. * .Bat) не будут автоматически завершаться в командной строке и не будут отображаться правильно окрашенными при использовании ls --color. Я связал это (я думаю) с тем фактом, что файлы летучих мышей отображаются как rw-r - r--. Я могу сделать что-то вроде ./run_my_batch_file.bat из командной строки, и пакетный файл будет работать правильно, но я должен ввести полное имя файла, иначе автозаполнение не поднимет его.
Я попытался запустить 'chmod 750' (а также различные другие режимы файлов), чтобы изменить командный файл, чтобы он содержал бит 'x', но их биты режима не изменились. Я уверен, что могу объяснить это тем, что я монтирую свои локальные диски с опцией noacl. Вот соответствующая строка из моего fstab:
(обратите внимание, что приведенный выше список каталогов взят с моего диска / cygdrive / d - локальной файловой системы NTFS). Это казалось довольно запутанным, поэтому я выбрал опцию «noacl», чтобы получить точные режимы файлов для файлов в моих каталогах.
Последнее замечание - у меня установлен полный пакет завершения bash. Я кратко посмотрел, смогу ли я изменить один из пакетов завершения, чтобы получить хотя бы часть того, что я хочу (это автоматическое завершение пакетного файла), но я не нашел там ничего, что могло бы иметь отношение к делу.
Таким образом, мои вопросы могут правильно изменить режимы файла командного файла, чтобы включить 'x', чтобы я мог получить правильное завершение командной строки bash на них (а также получить правильную раскраску каталогов на них, потому что они исполняемые файлы). Автозаполнение является более важным FWIW.
Благодарю.
Хотите верьте, хотите нет, но когда вы монтируете без опции `noacl`, вы видите точные разрешения. Дьявол кроется в деталях. Все файлы, отображаемые в списке каталогов, принадлежат администраторам группы (да, группы могут быть основным владельцем файлов в Windows). Завершающий `+` в разрешениях означает, что есть разрешения, которые не могут быть закодированы в классическом синтаксисе UNIX `rwxrwxrwx`. Эти разрешения закодированы в ACL (список контроля доступа). Вы можете увидеть полный ACL для файла или каталога, набрав `icacls FILE`.
Fran 11 лет назад
0
К вашему сведению, «разрешения, которые не могут быть закодированы в классическом синтаксисе rwxrwxrwx» UNIX, о которых я упоминал в моем предыдущем комментарии, - это такие вещи, как ACE, предоставляющий SYSTEM полный контроль над вашими файлами. Ничто не мешает вам удалить эти дополнительные разрешения с помощью команды `setfacl`:` setfacl -s user :: rw-, group :: r -, other: r-- FILE` Параметр `-s` для` setfacl` означает установить ACL точно на то, что показано, заменив существующий ACL. `Setfacl` Cygwin сделает это, удалив унаследованные ACL.
Fran 11 лет назад
0
2 ответа на вопрос
2
Andrew Schulman
Я не уверен в ответе на ваш вопрос, но вот несколько вещей, которые могут помочь:
Убедитесь, что PATHEXTпеременная окружения содержит .BAT.
Читайте об этом noaclварианте здесь . Похоже, что вам лучше удалить noaclи потратить некоторое время, чтобы получить реальные права.
Спросите в списке рассылки cygwin . Там много экспертов, которые почти наверняка могут ответить на ваш вопрос.
0
gavenkoa
Для тех, кто использует noaclпараметры (единственный разумный вариант жить вне Cygwin), добавьте одиночную двоеточие :в качестве первой строки вашего пакетного файла.
Официальные документы говорят:
Файлы, оканчивающиеся на определенные расширения (.exe, .com, .lnk), считаются исполняемыми. Файлы с первыми двумя символами «#!», «MZ» или «: \ n» также считаются исполняемыми.