gpt4 book ai didi

shell - 如何使用带有 shebang 的 awk 的多个参数(即 #!)?

转载 作者:行者123 更新时间:2023-12-03 04:39:23 25 4
gpt4 key购买 nike

我想执行 gawk使用 shebang 的 --re-interval 脚本。

的“天真”方法
#!/usr/bin/gawk --re-interval -f
... awk script goes here

不起作用,因为 gawk 是用第一个参数 "--re-interval -f" 调用的(没有围绕空格分割),它不理解。有解决方法吗?

当然,您可以不直接调用 gawk,而是将其包装到拆分第一个参数的 shell 脚本中,或者制作一个 shell 脚本,然后调用 gawk 并将该脚本放入另一个文件中,但我想知道是否有一些在一个文件中执行此操作的方法。

shebang 线的行为因系统而异 - 至少在 Cygwin 中是不同的。它不会用空格分隔参数。我只关心如何在这样的系统上做到这一点;该脚本并不意味着可移植。

最佳答案

shebang 行从未被指定为 POSIX、SUS、LSB 或任何其他规范的一部分。 AFAIK,它甚至没有被正确记录。

关于它的作用有一个粗略的共识:获取 !\n 之间的所有内容并 exec 它。假设 !\n 之间的所有内容都是解释器的完整绝对路径。对于如果包含空格会发生什么,目前还没有达成共识。

  1. 某些操作系统只是将整个事物视为路径。毕竟,在大多数操作系统中,路径中的空格或破折号是合法的。
  2. 某些操作系统以空格分隔,并将第一部分视为解释器的路径,其余部分视为单独的参数。
  3. 某些操作系统在第一个空格处进行分割,并将前面的部分视为解释器的路径,而将其余部分视为单个参数(这就是您所看到的)。
  4. 有些甚至根本不支持 shebang 线。

值得庆幸的是,1. 和 4. 似乎已经消失,但 3. 相当普遍,因此您不能依赖能够传递多个参数。

由于 POSIX 或 SUS 中也未指定命令的位置,因此您通常通过将可执行文件的 name 传递给 env 来用完该单个参数,以便 >它可以确定可执行文件的位置;例如:

#!/usr/bin/env gawk

[显然,这个仍然假设env有一个特定的路径,但只有极少数系统它位于/bin中,所以这通常是安全的。 env 的位置比 gawk 的位置标准化得多,甚至比 pythonruby 之类的位置更标准化。或蜘蛛猴。]

这意味着您实际上根本无法使用任何参数。

关于shell - 如何使用带有 shebang 的 awk 的多个参数(即 #!)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com