如何在 bash/cygwin 中将批处理文件标记为可执行文件?

如何在 bash/cygwin 中将批处理文件标记为可执行文件?

为了改善我在 Windows 7 环境中的体验,我安装了 cygwin 并开始使用 mintty 作为我的命令行界面工具。这很不错,让我回到了在 Unix 环境中工作效率更高的日子。

但是有一件烦人的事情,我似乎无法让它正常工作。批处理文件(即 *.bat)不会在命令行上自动完成,也不会在使用 ls --color 时显示正确的颜色。我已经追踪到(我认为)bat 文件显示为 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 命令行完成(以及因为它们是可执行文件而获得正确的目录颜色)。自动完成更重要(仅供参考)。

谢谢。

答案1

我不确定你的问题的答案,但以下几点可能会有所帮助:

  • 检查PATHEXT环境变量是否包含.BAT
  • 了解noacl选项这里。看来您最好删除noacl,并花一些时间获取正确的实际权限。
  • 询问cygwin 邮件列表那里有很多专家,他们几乎肯定能回答你的问题。

答案2

对于那些使用选项的人noacl(在 Cygwin 之外唯一合理的选项)请将单个冒号添加:为批处理文件的第一行。

官方文档说:

以某些扩展名(.exe、.com、.lnk)结尾的文件被认为是可执行文件。前两个字符为“#!”、"MZ" 或 ":\n" 的文件也被认为是可执行文件。

相关内容