我有我有这样定义awk脚本:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
我已经保存为columns
,并chmod +x
倒是它。 我想调用它,以便start
和end
的定义,因为它穿越了一个文件。 我想这应该工作:
cat some_file | columns -v start=2
但事实并非如此。 救命!
ENV是处理这个问题的最简单的方法:
#!/usr/bin/env -S awk -f
添加更多的选择,并确保与你的论点无干扰,和awk的参数:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
作为ENV有POSIX标准,这shbang应该让你周围的整个unixen非标准shbang实现的困难。
编辑
写过此之后我意识到,“-S”是一个非POSIX兼容的FreeBSD ENV扩展 。 所以外壳包装可能是要走的就是那样,不幸的。