Respostas:
Você pode usar type
e which
determinar o que é um determinado comando bash
e, se for um aplicativo, onde ele reside.
$ type type
type is a shell builtin
$ type cd
cd is a shell builtin
$ type ls
ls is aliased to `ls --color=auto'
$ type -P ls
/Users/danielbeck/bin/ls
$ which which
/usr/bin/which
$ which ls
/Users/danielbeck/bin/ls
Os comandos which
e type -P
funcionam apenas para programas no seu PATH
computador, é claro, mas você não poderá executar outros digitando o nome do comando de qualquer maneira.
Se você estiver procurando uma maneira simples de determinar onde um pacote de aplicativos OS X (GUI) está instalado (conforme usado, por exemplo, pelo open
comando), você pode executar o seguinte AppleScript curto na linha de comando:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
Isso requer que o programa em questão (Safari no exemplo) esteja em execução.
Atualmente, este é o método para localizar o diretório de aplicativos Firefox no OSX e Linux. Deve ser fácil de adotar para outro aplicativo. Testado no OSX 10.7, Ubuntu 12.04, Debian Jessie
#!/bin/bash
# Array of possible Firefox application names.
appnames=("IceWeasel" "Firefox") # "Firefox" "IceWeasel" "etc
#
# Calls lsregister -dump and parses the output for "/Firefox.app", etc.
# Returns the very first result found.
#
function get_osx_ffdir()
{
# OSX Array of possible lsregister command locations
# I'm only aware of this one currently
lsregs=("/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister")
for i in "${lsregs[@]}"; do
for j in ${appnames[@]}; do
if [ -f $i ]; then
# Some logic to parse the output from lsregister
ffdir=$($i -dump |grep -E "/$j.app$" |cut -d'/' -f2- |head -1)
ffdir="/$ffdir"
return 0
fi
done
done
return 1
}
#
# Uses "which" and "readlink" to locate firefox on Linux, etc
#
function get_ffdir()
{
for i in "${appnames[@]}"; do
# Convert "Firefox" to "firefox", etc
lower=$(echo "$i" |tr '[:upper:]' '[:lower:]')
# Readlink uses the symlink to find the actual install location
# will need to be removed for non-symlinked applications
exec=$(readlink -f "$(which $lower)")
# Assume the binary's parent folder is the actual application location
ffdir=$(echo "$exec" |rev |cut -d'/' -f2- |rev)
if [ -f "$ffdir" ]; then
return 0
fi
done
return 1
}
echo "Searching for Firefox..."
ffdir=""
if [[ "$OSTYPE" == "darwin"* ]]; then
# Mac OSX
get_osx_ffdir
else
# Linux, etc
get_ffdir
fi
echo "Found application here: $ffdir"
# TODO: Process failures, i.e. "$ffdir" == "" or "$?" != "0", etc
type
e type -P
não faz? O código não OSX funciona no OS X? Caso contrário, você pode explicar por que não? Se sim, por que você tem duas versões?
/bin
or /usr/bin
, etc., mas instalados no /Applications/My3rdPartyApp.app
e o binário é armazenado em um subdiretório, Contents/MacOS
tornando-o bastante difícil usar qualquer técnica de plataforma cruzada para determinar o local do aplicativo (daí o uso de lsregister
) Pior ainda, a estrutura de diretórios OSX coloca o binário em um local separado dos recursos. O trecho acima foi escrito para ajudar na localização do defaults/pref
diretório do Firefox .
/usr/bin/firefox
na verdade , não é o binário do Firefox, então eu uso a saída de readlink
para localizar para onde ele aponta e, em seguida, localizo o defaluts/prefs
diretório a partir daí. Em uma nota lateral, sobre o link simbólico: Doing ls -al /usr/bin/* |grep -- '->' |wc -l
ilustra cerca de 303 binários nesse diretório, minha configuração do Ubuntu é na verdade links simbólicos. (cerca de 16% deles) Por esse motivo, o código acima ** deve * eventualmente ser modificado para resolver os links simbólicos recursivamente até encontrar o caminho canônico para o binário.
type -P
pergunta, não estou familiarizado o suficiente com esse comando para responder à pergunta. Talvez você possa elaborar um pouco. :)
type
porque foi a base da primeira resposta (aceita). É um shell interno que indica como os nomes especificados seriam interpretados se usados como comandos. A versão POSIX, que é bastante simples, é descrita aqui . ... (continua)
Se o programa estiver em execução, chame
ps -ef | grep PROGRAMM
O caminho dos binários é referenciado na $PATH
variável
Você pode ver o conteúdo com env
.
$PATH
pode ser visto com env
, mas echo $PATH
seria menos detalhado.
Você pode usar " alias comando " " no terminal para listar todos os seus aliases. Ou, se você estiver em um diretório, poderá usar " pwd " para mostrar seu caminho atual.
Se você souber o nome do arquivo ou parte dele, use " find " para localizar seu arquivo.
find / -name things.jpeg
No MAC (OS X), você pode:
Agora você pode ver o caminho completo para o seu aplicativo na linha de comando e executá-lo a partir daí, se desejar.
Extraído do wikihow