Você pode descobrir qual executável será iniciado usando o comando
which <command>
Se você quiser determinar o caminho programaticamente, estará na troca de pilha errada.
Quando eu digito um nome de algum executável na linha de comando e ele inicia, como posso detectar o caminho onde esse executável está localizado?
which command localiza o arquivo executável de command em $PATH . Infelizmente isso não funcionará como esperado em todos os casos.
Quando command é um alias ou uma função, você não obterá um resultado correto porque o executável real em execução pode ter um nome completamente diferente. Por exemplo, muitas distribuições do Linux têm o ll alias definido por padrão. which ll não encontra nada. Outro caso problemático é quando seu shell se comporta de maneira não padrão e não executa o primeiro command encontrado no $PATH .
No Linux, se você quer ter certeza absoluta do caminho do arquivo executável de um processo em execução, então você pode obtê-lo de seu PID (ID do processo; no exemplo abaixo, coloque o número de $PID ):
readlink /proc/$PID/exe
Como obter o número? PID do último processo executado no shell em background é $! . Pequena demonstração:
sleep 20 &
readlink /proc/$!/exe
Você pode obter PIDs de outros processos, por exemplo, de uma lista de processos usando ps -ef .
Explicação: /proc/$PID/exe é um link simbólico para o arquivo executável do processo em execução . O comando readlink mostra o alvo para o qual o link simbólico está apontando.
Infelizmente, o método readlink /proc/$PID/exe não funciona como esperado com linguagens de script como bash, Perl, Python, etc. Nesses casos, você obterá o caminho para o interpretador do script (como /bin/bash ) em vez do caminho para o roteiro. Para se aproximar das informações que você pode usar:
cat /proc/$PID/cmdline # the commandline with the interpreter and script
readlink /proc/$PID/cwd # the current working directory
Infelizmente, o diretório de trabalho atual pode mudar desde o início do programa. Alguns intérpretes como o bash podem manter o arquivo de script aberto no descritor 255:
readlink /proc/$PID/fd/255
Qualquer processo pode chamar exec() , que substitui suas /proc/$PID/exe , /proc/$PID/cmdline e outras informações.
Tags linux