无法运行awk程序

无法运行awk程序

我创建了一个简单的 awk 程序文件/media/ravan/data/program

代码:

#! /usr/bin/awk -f
BEGIN { print "Don’t Panic bro!" }

在终端中执行时:

ravan@ravan:/media/ravan/data/program$ ls
awkTest.awk  testawk.awk
ravan@ravan:/media/ravan/data/program$ chmod +x awkTest.awk
ravan@ravan:/media/ravan/data/program$ ./awkTest.awk
bash: ./awkTest.awk: Permission denied

mount输出部分

/dev/sda3 on /media/ravan/data type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

的输出ls -l

ravan@ravan:~$ ls -l /media/ravan/data/program
total 1
-rw------- 1 ravan ravan 55 Nov  9 15:03 awkTest.awk
-rw------- 1 ravan ravan 52 Nov  9 13:29 testawk.awk

答案1

我不知道您的文件系统挂载发生了什么,但解决它非常简单。您只需要了解 shebang 实际上在做什么。

当文件被标记为可执行并且您尝试运行它时,将检查文件的前两个字节。如果是#!,那么 shell 会将文件的第一行作为命令运行,然后将文件本身的路径作为该命令的参数运行。

换句话说,#!/bin/bash作为名为 的文件中的第一行放置的/tmp/myscript.sh,将作为 运行/bin/bash /tmp/myscript.sh

同样,当运行时,#!/usr/bin/awk -f第一行将./awkTest.awk变为(或者如果您的安装问题没有干扰,则应该变为)/usr/bin/awk -f ./awkTest.awk

解决方案是直接运行awk -f awkTest.awk,您的脚本就会按预期运行。


请注意,因为awk解释的而不是编译,noexec保存 awk 脚本的设备的安装选项上的标志惯于阻止您运行脚本。它只会阻止您运行它作为可执行文件。所以你需要做的就是运行你的awk二进制可执行文件(/usr/bin/awk),它将您的awk脚本,当然不会被该noexec标志阻止,并且它将执行您编写的脚本。

相关内容