Как пометить командные файлы как исполняемые файлы в 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:

none /cygdrive cygdrive binary,posix=0,user,noacl 0 0 

Я добавил 'noacl', потому что без него биты режима файла, похоже, облажались. Вот пример списка без параметра 'noacl'.

-r-x------+ 1 Administrators Domain Users 209K Jul 18 16:46 some.dll -rwx------+ 1 Administrators Domain Users 867K Aug 22 11:21 binary_filea -rwx------+ 1 Administrators Domain Users 736K Aug 28 18:02 binary_fileb -rwx------+ 1 Administrators Domain Users 736K Aug 28 17:43 binary_filec -rwx------+ 1 Administrators Domain Users 14K Jan 21 2010 cache_00.bak -r-x------+ 1 Administrators Domain Users 354K Jun 6 22:42 cdb.exe -rwx------+ 1 Administrators Domain Users 22 Mar 14 08:05 cleanup_scratch_folder.bat drwx------+ 1 Administrators Domain Users 0 Mar 3 14:59 code -rwx------+ 1 Administrators Domain Users 1.8K Aug 12 14:34 config.txt -rwx------+ 1 Administrators Domain Users 52 Aug 28 19:05 console_history -rwx------+ 1 Administrators Domain Users 3.8M Aug 23 09:46 copy_files.bat 

(обратите внимание, что приведенный выше список каталогов взят с моего диска / cygdrive / d - локальной файловой системы NTFS). Это казалось довольно запутанным, поэтому я выбрал опцию «noacl», чтобы получить точные режимы файлов для файлов в моих каталогах.

Последнее замечание - у меня установлен полный пакет завершения bash. Я кратко посмотрел, смогу ли я изменить один из пакетов завершения, чтобы получить хотя бы часть того, что я хочу (это автоматическое завершение пакетного файла), но я не нашел там ничего, что могло бы иметь отношение к делу.

Таким образом, мои вопросы могут правильно изменить режимы файла командного файла, чтобы включить 'x', чтобы я мог получить правильное завершение командной строки bash на них (а также получить правильную раскраску каталогов на них, потому что они исполняемые файлы). Автозаполнение является более важным FWIW.

Благодарю.

4
Хотите верьте, хотите нет, но когда вы монтируете без опции `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» также считаются исполняемыми.