首页 > 解决方案 > “#!” 执行 awk 脚本时不被识别为内部或外部命令

问题描述

按照教程https://www.gnu.org/software/gawk/manual/gawk.html 我在具有简单 awk 脚本的 Windows 上创建了一个 cmd 文件

 #! /bin/awk -f

BEGIN { print "Don't Panic!" }

但是 windows 不接受 Shebang 符号 #! 并给我一个错误:

“#!” 不被识别为内部或外部命令、可运行程序或批处理文件。

如何使文件在 windows cmd 上可执行?

标签: windowsawkcmd

解决方案


“shebang”(sharp+bang)符号#!非常具体地是 Unix/Linux 内核的东西;当您使用exec(2)系统调用来执行文件时,有逻辑会查看文件是否是脚本,如果是,则在其上调用指定的解释器,而不是仅仅期望文件本身是可执行的二进制文件。我认为没有任何类似的方法可以将带有任意解释器的脚本转换为 Windows 上使用CMD.

您可以做的是选择一个文件后缀(如.awk),将该后缀与资源管理器中的 awk 可执行文件相关联,然后使用start(或双击)运行 awk 脚本,而不仅仅是输入裸文件名。

但是您想将 awk 脚本转换为可以在 CMD 提示符下运行的命令,最可靠的方法是制作一个.bat在文件上手动运行 awk 的批处理 ( ) 文件,看起来像这样(假设 awk脚本文件与批处理文件位于同一文件夹中):

@echo off
awk -f "%~dp0filename.awk"

这是一个从您的脚本构建的工作示例:

C:\>echo %PATH%
c:\users\mjreed\bin;C:\windows\system32;C:\windows;...

C:\>type \users\mjreed\bin\hello.bat
@echo off
awk -f "%~dp0hello.awk"

C:\>type \users\mjreed\bin\hello.awk
BEGIN { print "Don't Panic!" }

C:\>hello
Don't Panic!

推荐阅读