Risposte:
È possibile utilizzare typee whichper determinare in cosa bashconsiste un determinato comando e, se si tratta di un'applicazione, dove risiede.
$ 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
I comandi whiche type -Pfunzionano solo per i programmi sul tuo PATH, ovviamente, ma non sarai in grado di eseguirne altri digitando comunque il loro nome di comando.
Se stai cercando un modo semplice per determinare dove è installato un bundle di applicazioni OS X (GUI) (come ad esempio utilizzato dal opencomando), puoi eseguire il seguente breve AppleScript dalla riga di comando:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
Ciò richiede che il programma in questione (Safari nell'esempio) sia in esecuzione.
Questo è attualmente il metodo per individuare la directory dell'applicazione Firefox in OSX e Linux. Dovrebbe essere facile da adottare per un'altra applicazione. Testato su 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
typee type -Pnon lo fanno? Il codice non OSX funziona su OS X? In caso contrario, puoi spiegare perché no? Se sì, perché hai due versioni?
/bino /usr/bin, ecc. Ma invece sono installate su /Applications/My3rdPartyApp.appe il binario è archiviato in una sottodirectory Contents/MacOSche lo rende abbastanza difficile usare qualsiasi tecnica multipiattaforma per determinare la posizione dell'applicazione (quindi l'uso di lsregister) Peggio ancora, la struttura della directory OSX posiziona il binario in una posizione separata dalle risorse. Lo snippet sopra è stato scritto per aiutare a individuare la directory di Firefox defaults/pref.
/usr/bin/firefoxrealtà non è il binario di Firefox, quindi uso l'output di readlinkper individuare dove punta, e quindi trovo la defaluts/prefsdirectory da lì. In una nota a margine, riguardo al symlinking: Doing ls -al /usr/bin/* |grep -- '->' |wc -lillustra circa 303 binari in quella directory la mia configurazione di Ubuntu sono in realtà link simbolici. (circa il 16% di questi) Per questo motivo, il codice sopra riportato ** dovrebbe * eventualmente essere modificato per risolvere ricorsivamente i collegamenti simbolici fino a quando non trova il percorso canonico del binario.
type -Pdomanda, non ho abbastanza familiarità con quel comando per rispondere alla domanda. Forse puoi elaborare un po '. :)
typeperché era la base della prima (e accettata) risposta. È una shell incorporata che indica come i nomi specificati verrebbero interpretati se usati come comandi. La versione POSIX di esso, che è piuttosto spoglia, è descritta qui . ... (proseguendo)
Se il programma è in esecuzione, chiamare
ps -ef | grep PROGRAMM
Il percorso dei binari è indicato nella $PATHvariabile.
Puoi vederne il contenuto con env.
$PATHpuò essere visualizzato con env, ma echo $PATHsarebbe meno dettagliato.
Puoi usare il comando " alias " nel terminale per elencare tutti i tuoi alias. Oppure, se ci si trova in una directory, è possibile utilizzare " pwd " per mostrare il percorso corrente.
Se conosci il nome file o una parte del nome file, puoi utilizzare " trova " per individuare il file.
find / -name things.jpeg
Su MAC (OS X) puoi fare:
Ora puoi vedere il percorso completo della tua applicazione dalla riga di comando ed eseguirlo da lì, se lo desideri.
Tratto da wikihow