首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分发脚本:我应该使用/bin/gawk还是/usr/bin/gawk作为shebang?

分发脚本:我应该使用/bin/gawk还是/usr/bin/gawk作为shebang?
EN

Unix & Linux用户
提问于 2013-10-22 18:19:24
回答 3查看 3.8K关注 0票数 12

gawk通常在/bin或/usr/bin中吗?我会和#!/usr/bin/env gawk一起去,但是我不能用参数。现在我正在使用#!/bin/gawk -f。这个脚本很长,包含很多单引号,并且与stdin一起工作。

GNU手册有第1.1.4节可执行的awk程序,它在示例中使用#!/bin/awk,但接着说:

请注意,在许多系统中,awk可能在/usr/bin中而不是在/bin中找到。请注意:“清空者”

大多数人都做什么?我读过sed在/bin中应该是标准化的,而perl在/usr/bin中应该是标准化的(与sed链接相同的页面,但他们不允许我为这篇文章创建第三个链接)。那awk/gawk呢?有谁知道哪个更常见还是更受欢迎?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2013-10-22 20:12:47

她不应该那么灵活。在某些情况下,有第二个参数起作用,我认为FreeBSD就是其中之一。

gawk和操作系统附带的大多数实用程序都将在/usr/bin/中运行。

在以前的UNIX时代,通常通过NFS或一些较便宜的媒体安装/usr/,以节省每个工作站的本地磁盘空间和成本。/bin/应该拥有在单用户模式中启动所需的一切。由于/usr/没有安装在可靠的媒体上,所以/bin/包含了足够多的实用程序,使其足够友好地用于一般管理和故障排除。

这最初是在Linux中继承的,但是由于磁盘空间不再是一个问题,而且在大多数情况下/usr/在根文件系统中,当前的趋势是在/usr/bin中移动所有东西(至少在Linux世界中是这样)。因此,大多数由发行版安装的实用程序都可以在那里找到。甚至是最基本的实用程序,如cprmls等(嗯,还没有)。

关于她的选择。传统上,这是管理员或用户必须根据他们的环境编辑的东西。开发人员都知道,在其他人的系统中,解释器可能在文件系统中的任何地方(例如/usr/local/bin/opt/gawk-4.0.1/bin)。正确打包的脚本(rpm,deb等)附带了对发行版包的依赖(即。解释器有一个已知的位置),或者在安装过程中设置适当的hashbang的配置脚本。

票数 7
EN

Unix & Linux用户

发布于 2013-10-23 16:41:57

如果您不需要将参数传递给命令,那么#!/usr/bin/env gawk就是方法之一,但是许多内核(包括Linux)只接受一个参数来执行shebang程序。

否则,您可以创建一个多角化程序,它既是一个shell包装器,也是一个awk脚本。这是一个给awk的。

代码语言:javascript
复制
#!/bin/sh
true + /; exec gawk -f "$0"; exit; / {}
# awk script starts here

Shell解析:

  • true + /; - the命令true (它什么也不做)有两个惰性参数+/
  • gawk的电话。这可能是任何不包含换行符的shell代码段,并且其中的斜杠是写的\/ (除了内部引号之外,.不介意),调用使用exec代替gawk,而不是作为子进程执行gawk。
  • exit; -退出外壳,以防找不到gawk。之后的任何内容都会被忽略,除非它应该是有效的shell语法,以防shell在开始执行之前试图解析整行。

Awk解析:

  • 斜杠之间的位是一个正则表达式。
  • true + /REGEX/ - a条件true是一个未定义的变量,因此它的数值为0,并不重要。
  • {} - If说条件成立,什么都不做。
票数 16
EN

Unix & Linux用户

发布于 2020-05-25 02:30:32

如果安装了更现代的coreutils (IIUC 8.30+),现在可以使用

代码语言:javascript
复制
#!/usr/bin/env -S gawk -f

所有选项都将作为一个参数传递给env,并将它们分开。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/97141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档