开始:通过源代码运行时,在简单的awk脚本中找不到命令

斯蒂芬·罗兰(Stephane Rolland)

awk今天正在学习,但是我无法成功使用最简单的脚本来工作。

#!/usr/bin/env -S awk -f
BEGIN { }
{ }
END { }

这个输出 BEGIN: command not found

甚至

#!/usr/bin/env -S awk -f
{}

这个输出 {}: command not found

启动时$ /usr/bin/env -S awk -f,确实有awk可执行文件显示其默认输出。

$ awk --version说它是nixos 19.09上的awk版本5.0.1。

我需要使用/usr/bin/env,因为nixos文件没有遵循传统的FHS目录层次结构。

我怀疑我缺少明显的东西,但是看awk教程和SO问题目前还没有给我任何线索。

编辑:我用来启动脚本的命令行

ls -l | . testawk.sh
芒登

采购执行不同。具体来说,采购期望可以在当前shell中执行的命令列表。以下是bash的help .

。:。文件名[参数]

从当前Shell中的文件执行命令。

在当前Shell中从FILENAME读取并执行命令。$ PATH中的条目用于查找包含FILENAME的目录。如果提供了任何ARGUMENTS,则它们将在执行FILENAME时成为位置参数。

因此,当您运行时. file,您的外壳程序将读取文件并执行找到的每个命令。但是,这意味着shebang行将被忽略,并被视为常规注释。因此,您的shell(而不是awk)正在尝试执行BEGIN

为避免这种情况,您应该执行脚本而不是采购脚本。如果由于某种原因而只需要来源,则在脚本中编写一个awk命令:

awk '
BEGIN { }
{ }
END { }'

那你就可以

ls | . ./a.awk 

虽然我真的无法想到您为什么会想要。


顺便说一句,您应该知道默认情况下.(或sourcebash中的)会在您$PATH文件中查找文件名因此,如果您运行. foo,并且foo在当前目录中有一个文件,并且foo在您的中的任何目录中都有一个文件$PATH,那么将要获取的文件是您目录中的文件,$PATH而不是当前目录中的文件。为避免这种情况,请在采购时始终使用完整路径:. ./foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 docker bash 脚本中运行时找不到命令

通过crontab运行时“找不到gcloud命令”

shopt在命令行中工作,在脚本中运行时找不到

从 Dockerfile 运行时在 Docker 中找不到命令

以sudo运行时找不到命令

在Git bash上运行时,Java源代码中带有vimdiff命令的Shell脚本被卡住

从Java代码运行时Python脚本找不到依赖项

当我通过Jenkins阶段运行时,sh命令给出“ [[:找不到”错误

通过命令行运行时找不到或加载主类

Golang-通过Upstart运行时找不到命令“ go”

在sudo中运行时找不到命令,但在以普通用户身份运行时提供输出

Web Assembly emrun:从批处理脚本运行时找不到命令,但在命令窗口中运行良好

运行时找不到Codebuild AWS命令?

为什么从〜运行时find命令找不到目录?

使用 sudo 运行时找不到命令

使用sudo bash运行时找不到命令

grunt:从终端运行时找不到命令

Python3:从cli运行时找不到命令

使用 sudo 运行时找不到 pyenv 命令

从 WSL 中的 bash 脚本运行时,CMake 找不到源目录

通过Gunicorn运行时Flask在模板文件夹中找不到HTML文件

找不到在Shell脚本中运行的命令

Python在Linux中运行时找不到模块

在Docker容器中运行时找不到Sendmail主机

运行时错误:在java程序中找不到main

Django:在Docker容器中运行时找不到模块

dpkg-reconfigure:在cron中运行时找不到

通过crontab运行时arp不在脚本中运行

通过 cron 运行脚本时“找不到命令”