Usando o GNU awk
Verificando o guia do usuário do GNU awk - 7.5.2 Variáveis integradas que transmitem informações Eu tropecei em:
PROCINFO #
The elements of this array provide access to information about the
running awk program. The following elements (listed alphabetically)
are guaranteed to be available:
PROCINFO["pid"]
The process ID of the current process.
Isso significa que você pode conhecer o PID do programa durante o tempo de execução. Então, é uma questão de usar system()
para procurar o processo com este PID:
#!/usr/bin/gawk -f
BEGIN{ pid=PROCINFO["pid"]
system("ps -ef | awk '$2==" pid " {print $NF}'")
}
Eu uso ps -ef
, que exibe o PID na segunda coluna. Assumindo que a execução é feita através de awk -f <script>
e nenhum outro parâmetro, podemos assumir que o último campo da linha contém as informações que desejamos.
No caso de termos alguns parâmetros, teríamos que analisar a linha de maneira diferente - ou melhor, usar algumas das opções de ps
para imprimir apenas as colunas em que estamos interessados.
Teste
$ awk -f a.awk
a.awk
$ cp a.awk hello.awk
$ awk -f hello.awk
hello.awk
Note também que outro capítulo do guia do usuário do GNU awk nos diz que o ARGV não é o caminho a seguir:
1.1.4 Executable awk Programs
Finally, the value of ARGV[0] (see Built-in Variables) varies
depending upon your operating system. Some systems put ‘awk’ there,
some put the full pathname of awk (such as /bin/awk), and some put the
name of your script (‘advice’). (d.c.) Don’t rely on the value of
ARGV[0] to provide your script name.