脚本本身内的awk脚本的完整路径

时间:2014-06-26 01:21:08

标签: macos awk path

我有一个AWK脚本,即linux中的ascii文件可执行文件,第一行是:

#!/usr/bin/awk -f 

如果我在同一目录中,我会像这样执行myscript:

> ./myscript  afile

或者像这样,如果我在另一个目录中:

> pwd
/some_weird_path
> /full_path/myscript   afile

我如何才能访问" / full_path /"从AWK脚本本身?我没有成功地尝试以下方法:

ARGV[0]  => /usr/bin/awk
ARGV[1]  => afile
ENVIRON["PWD"] => some_weird_path

想法?

2 个答案:

答案 0 :(得分:1)

这很难看,但似乎与linux上的gnu awk一起使用。

BEGIN {
        getline cmdline <("/proc/"PROCINFO["pid"]"/cmdline")
        nf=split(cmdline,fields,/\0/)
        print fields[3]
      }

这甚至更加丑陋,但它应该适用于任何具有ps实现的系统,只要awk的路径和脚本的路径都不包含空格字符:

BEGIN {
        "ps -p "PROCINFO["pid"]" -ocommand=" | getline cmdline
        nf=split(cmdline,fields," ")
        print fields[3]
      }

因人而异。

答案 1 :(得分:1)

我想出了怎么做。基于丰富的建议,这在OSX上对我不起作用,我在&#34; / usr / bin / awk&#34;&#34; / usr / bin / awk&#34;找出哪条线对应于实际命令。

BEGIN {
   while ( ( "ps -ocommand=" | getline pslines ) > 0 ) {
      if ( pslines ~ "/usr/bin/awk -f" ) { 
          split(pslines, tmp);
      }
   }
   print tmp[3]
}

它应该适用于任何系统(未经测试)...至少只要相同的用户ID没有在同一时间运行另一个awk副本。