web-dev-qa-db-fra.com

Comment trouver le chemin d'accès à un programme dans Terminal?

J'ai installé une application et je peux maintenant y accéder via un terminal en tant qu'application. C'est un alias, cependant. Comment trouver le chemin d'accès complet au fichier?

22
Xitrum

Vous pouvez utiliser type et which pour déterminer ce qu'est une commande donnée dans bash et, s'il s'agit d'une application, son emplacement.

$ 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

Les commandes which et type -P ne fonctionnent que pour les programmes de votre PATH, bien sûr, mais vous ne pourrez pas en exécuter d’autres en tapant simplement le nom de la commande.


Si vous recherchez un moyen simple de déterminer où un ensemble d'applications OS X (GUI) est installé (utilisé par exemple par la commande open), vous pouvez exécuter le court AppleScript suivant à partir de la ligne de commande:

$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app

Cela nécessite que le programme en question (Safari dans l'exemple) soit en cours d'exécution.

27
Daniel Beck

C’est la méthode que j’utilise actuellement pour localiser le répertoire de l’application Firefox sous OSX et Linux. Devrait être facile à adopter pour une autre application. Testé sur 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
3
tresf

Si le programme est en cours, appelez

ps -ef | grep PROGRAMM
2
Matthias M

Le chemin des fichiers binaires est référencé dans la variable $PATH.

Vous pouvez voir son contenu avec env.

0
user209678

Vous pouvez utiliser la commande " alias " dans le terminal pour répertorier tous vos alias. Ou si vous êtes dans un répertoire, vous pouvez utiliser " pwd " pour afficher votre chemin actuel.

Si vous connaissez le nom de fichier ou une partie du nom de fichier, vous pouvez utiliser " find " pour localiser votre fichier.

find / -name things.jpeg
0
Steve Butabi