Usando o GNU awk
Verificando o guia do usuário do GNU awk - 7.5.2 Variáveis internas que transmitem informações Eu me deparei com:
PROCINFO #
Os elementos dessa matriz fornecem acesso a informações sobre o programa awk em execução. Os seguintes elementos (listados em ordem alfabética) estão garantidos como disponíveis:
PROCINFO ["pid"]
O ID do processo atual.
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 fornecido:
#!/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 2ª coluna. Assumindo que a execução é feita através awk -f <script>
e sem outros parâmetros, podemos assumir que o último campo da linha contém as informações que queremos.
Caso tivéssemos 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 nas quais estamos interessados.
Teste
$ awk -f a.awk
a.awk
$ cp a.awk hello.awk
$ awk -f hello.awk
hello.awk
Observe 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 Programas executáveis do awk
Finalmente, o valor de ARGV [0] (consulte Variáveis internas) varia de acordo com o seu sistema operacional. Alguns sistemas colocam 'awk' lá, outros colocam o nome completo do caminho do awk (como / bin / awk) e outros colocam o nome do seu script ('conselhos'). (dc) Não confie no valor de ARGV [0] para fornecer seu nome de script.