O valor $_
é visível para o processo filho. A maneira como você lê na criança depende da linguagem que você usa.
por exemplo. em C
#include <stdlib.h>
#include <stdio.h>
main()
{
char *x=getenv("_");
printf("%s\n",x);
}
No entanto, um programa não pode contar com $_
sendo definido porque outras camadas podem fazer coisas diferentes.
por exemplo,
$ env -i /bin/bash -c ./a.out
./a.out
$ env -i /bin/ksh -c ./a.out
*31801*./a.out
$ env -i /bin/sh -c ./a.out
Segmentation fault (core dumped)
/ bin / sh (que é "dash" neste sistema Ubuntu) não configura $ _ de forma alguma e por isso este simples programa falha. Oops: -)
Seu programa de chamada não pode ver esse valor de $_
. De fato, no shell de chamada $_
é definido como o último parâmetro da linha anterior
$ ls /tmp > /dev/null
$ echo $_
/tmp
$ echo hello
hello
$ echo $_
hello