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?
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.
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
Si le programme est en cours, appelez
ps -ef | grep PROGRAMM
Le chemin des fichiers binaires est référencé dans la variable $PATH
.
Vous pouvez voir son contenu avec env
.
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