Sim, o cmdline
irá variar dependendo de exatamente qual exec*
de chamada do sistema foi feita, e um caminho totalmente qualificado pode ser diferente de qual env(1)
aparece na pesquisa de caminho.
bash-4.1$ cat aaa
#!/bin/bash
xxd /proc/$$/cmdline
bash-4.1$ cat bbb
#!/usr/bin/env bash
xxd /proc/$$/cmdline
bash-4.1$ ./aaa
0000000: 2f62 696e 2f62 6173 6800 2e2f 6161 6100 /bin/bash../aaa.
bash-4.1$ ./bbb
0000000: 6261 7368 002e 2f62 6262 00 bash../bbb.
bash-4.1$
strace
mostra os detalhes:
bash-4.1$ strace ./aaa 2>&1 | grep exec
execve("./aaa", ["./aaa"], [/* 57 vars */]) = 0
bash-4.1$ strace ./bbb 2>&1 | grep exec
execve("./bbb", ["./bbb"], [/* 57 vars */]) = 0
execve("/sbin/bash", ["bash", "./bbb"], [/* 57 vars */]) = -1 ENOENT (No such file or directory)
execve("/usr/sbin/bash", ["bash", "./bbb"], [/* 57 vars */]) = -1 ENOENT (No such file or directory)
execve("/usr/local/sbin/bash", ["bash", "./bbb"], [/* 57 vars */]) = -1 ENOENT (No such file or directory)
execve("/bin/bash", ["bash", "./bbb"], [/* 57 vars */]) = 0
bash-4.1$
Se este for um script somente do Linux, a localização de bash
provavelmente não variará (exceção: há um depósito de software de algum tipo que inclui bash
, em outro lugar). Portanto, usar o caminho completo provavelmente faz mais sentido, já que isso evita env(1)
em busca de caminhos e ganha compatibilidade com as ferramentas init.