Como encontro o caminho para um programa no Terminal?

17

Eu instalei um aplicativo e agora posso acessá-lo via terminal como myapplication. É um pseudônimo, no entanto. Como posso encontrar o caminho completo para o arquivo?

    
por Xitrum 22.03.2013 / 22:06

5 respostas

22

Você pode usar type e which para determinar o que é um determinado comando em 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 só funcionam para programas no seu PATH , é claro, mas você não poderá executar outros apenas digitando o nome do comando deles mesmo assim.

Se você estiver procurando uma maneira simples de determinar onde um pacote de aplicativos do OS X (GUI) está instalado (como usado, por exemplo, pelo comando open ), 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.

    
por 22.03.2013 / 22:24
2

Este é o método atualmente para localizar o diretório de aplicativos do Firefox no OSX e no 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
    
por 28.05.2015 / 04:48
2

Se o programa estiver em execução, ligue

ps -ef | grep PROGRAMM
    
por 21.11.2016 / 10:22
0

O caminho dos binários é referenciado na variável $PATH .

Você pode ver seu conteúdo com env .

    
por 22.03.2013 / 22:41
0

Você pode usar o comando " alias " 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ê sabe o nome do arquivo ou parte do nome do arquivo, então você pode usar o " find " para localizar o arquivo.

find / -name things.jpeg
    
por 24.03.2013 / 16:44