Respuestas:
Puede usar type
y which
para determinar en qué bash
consiste un determinado comando y, si es una aplicación, dónde 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
Los comandos which
y type -P
solo funcionan para programas en su PATH
, por supuesto, pero no podrá ejecutar otros simplemente escribiendo su nombre de comando de todos modos.
Si está buscando una manera simple de determinar dónde está instalado un paquete de aplicación OS X (GUI) (como lo usa, por ejemplo, el open
comando), puede ejecutar el siguiente AppleScript corto desde la línea de comandos:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
Esto requiere que el programa en cuestión (Safari en el ejemplo) se esté ejecutando.
Este es el método que actualmente uso para localizar el directorio de la aplicación Firefox en OSX y Linux. Debería ser fácil de adoptar para otra aplicación. Probado en 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
y type -P
no lo hacen? ¿El código que no es OSX funciona en OS X? Si no, ¿puedes explicar por qué no? En caso afirmativo, ¿por qué tienes dos versiones?
/bin
o /usr/bin
, etc, pero en vez instalado para /Applications/My3rdPartyApp.app
y el binario se almacena en un subdirectorio Contents/MacOS
por lo que es bastante difícil de usar cualquier técnica multiplataforma para determinar la ubicación de la aplicación (de ahí el uso de lsregister
) Peor aún, la estructura del directorio OSX coloca el binario en una ubicación separada de los recursos. El fragmento anterior se escribió para ayudar a localizar el defaults/pref
directorio de Firefox .
/usr/bin/firefox
realidad no es el binario de Firefox, por lo que utilizo la salida de readlink
para localizar a dónde apunta y luego encontrar el defaluts/prefs
directorio desde allí. En una nota al margen, sobre el enlace simbólico: Hacer ls -al /usr/bin/* |grep -- '->' |wc -l
ilustra unos 303 binarios en ese directorio, mi configuración de Ubuntu son en realidad enlaces simbólicos. (alrededor del 16% de ellos) Por esta razón, el código anterior ** debería * eventualmente modificarse para resolver enlaces simbólicos de forma recursiva hasta que encuentre la ruta canónica al binario.
type -P
pregunta, no estoy lo suficientemente familiarizado con ese comando para responder la pregunta. Quizás puedas elaborar un poco. :)
type
porque fue la base de la primera respuesta (y aceptada). Es un shell incorporado que indica cómo se interpretarían los nombres especificados si se usaran como comandos. Aquí se describe la versión POSIX, que es bastante básica . … (Continúa)
Si el programa se está ejecutando, llame
ps -ef | grep PROGRAMM
La ruta de los binarios se referencia en la $PATH
variable.
Puedes ver su contenido con env
.
$PATH
se puede ver con env
, pero echo $PATH
sería menos detallado.
Puede usar el comando " alias " en la terminal para enumerar todos sus alias. O si está en un directorio, puede usar " pwd " para mostrar su ruta actual.
Si conoce el nombre del archivo o una parte del mismo, puede usar " buscar " para ubicar su archivo.
find / -name things.jpeg
En MAC (OS X) puedes hacer:
Ahora puede ver la ruta completa a su aplicación en la línea de comando y ejecutarla desde allí si lo desea.
Tomado de wikihow