【问题标题】:awk shebang doesn't workawk shebang 不起作用
【发布时间】:2012-12-26 21:25:32
【问题描述】:

我有一个简单的awk 程序:

#!/usr/bin/awk -f
BEGIN {print "work already!"}

如果我运行它:

awk -f panic

在 (osx) 终端上它可以工作。但是如果我尝试将它作为脚本运行它会失败:

. panic
-bash: BEGIN: command not found

我使用which awk 检查了awk 的位置,它确实位于/usr/bin/awk。任何想法为什么它不起作用?

【问题讨论】:

    标签: linux bash shell unix awk


    【解决方案1】:

    ./panic 运行它,而不是. panic,因为后者与运行source panic 相同,它不会做你想要的。见man source

    【讨论】:

    • 不应该是help source吗?
    【解决方案2】:

    要将文件作为脚本运行,您必须键入:

    ./<script>
    

    编辑

    正如 William Pursell 所指出的,. 不是 source 的别名,而是恰恰相反。

    。不是源的别名。 .是在当前 shell 中运行另一个脚本的 sh 标准命令。 source 是一个源自 csh 的命令,并被许多 sh 克隆用作 . 的别名。如果要将 source 视为除可憎之外的任何东西,它是 . 的别名,而不是相反。

    【讨论】:

    • . 不是 source 的别名。 .sh 标准命令,用于在当前 shell 中运行另一个脚本。 source 是一个源自csh 的命令,并被许多sh 克隆用作. 的别名。如果source 不被视为可憎之物,那么它就是. 的别名,而不是相反。
    • 我的答案是第一个......
    • @WilliamPursell 出于兴趣,源命令有什么问题?有没有更好的方法来达到同样的结果?或者你只是说这是不必要的重复。 ?
    • 源命令本身没有任何错误,只是它是. 的别名,我认为. 是一个source 的别名。但是,严格来说,根据开放组标准(pubs.opengroup.org/onlinepubs/9699919799)“如果命令名称与下表中列出的实用程序名称匹配,则结果未指定。” source 是列出的命令之一。也就是说,它是非标准的,并且在技术上使用它会导致未指定的行为。但实际上,它几乎可以在您可能使用的所有 shell 中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2019-01-20
    • 2011-03-08
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多