windows - “#!” 执行 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 上可执行?
解决方案
“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!
推荐阅读
- macos - zsh: command not found: heruko - 如何在 Mac Catalina 上使用 Heroku CLI 启动和运行?
- android - 使用协程作用域编译 Kotlin 函数时出现 JVM 错误
- java - 使用 TestNG、Appium 和 Selenium 运行并行和顺序测试
- ruby-on-rails - ActionController::ParameterMissing(参数丢失或值为空:matatu)ruby on rails
- azure - Azure DevOps - 如何使用 TFVC 在管道任务中以编程方式创建分支
- angular - @angular/router:未检索到路由数据
- java - 服务器处理命令
- html - 未知错误:如果满足条件,则在 HTML 代码中播放音频
- javascript - OpenWeatherMap API:无法读取未定义的属性
- twilio - 您如何在 Twilio 工作室中使用两个 if_value_matches?