Programas como SSH, sudo
, su
, etc., iniciam o shell usando a família exec
de chamadas do sistema . E essas chamadas de sistema permitem que o programa de chamada especifique cada argumento, incluindo a função. Por exemplo, usando sudo
para iniciar um shell de login:
$ strace -fe execve -o sudo.log sudo -i
root:~ $ echo $0
-bash
root:~ $ logout
$ grep bash sudo.log
19124 execve("/bin/bash", ["-bash"], [/* 31 vars */]) = 0
19140 execve("/bin/ls", ["ls", "/etc/bash_completion.d"], [/* 40 vars */]) = 0
Como pode ser visto na primeira chamada execve
, a matriz de argumentos passada para bash
é apenas ["-bash"]
- então o argumento zero é -bash
.