Я установил приложение, и теперь я могу получить к нему доступ через терминал как мое приложение. Это псевдоним, хотя. Как я могу найти полный путь к файлу?
5 ответов
Вы можете использовать type
и which
чтобы определить, что такое определенная команда в bash
, и, если это приложение, где она находится.
$ 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
Команды, which
и type -P
работают, конечно, только для программ в вашем PATH
, но вы не сможете запускать другие, просто введя их имя в любом случае.
Если вы ищете простой способ определить, где установлен пакет приложений OS X (GUI) (используемый, например, командой open
), вы можете выполнить следующий короткий AppleScript из командной строки:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
Для этого необходимо, чтобы рассматриваемая программа (в данном примере Safari) работала.
В настоящее время это метод, с помощью которого я могу найти каталог приложений Firefox в OSX и Linux. Должно быть легко перенести в другое приложение. Протестировано на 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
Если программа работает, позвоните
ps -ef | grep PROGRAMM
Путь к двоичным файлам указан в $PATH
.
Вы можете увидеть его содержание с env
.
Вы можете использовать команду « alias » в терминале, чтобы получить список всех ваших псевдонимов. Или, если вы находитесь в каталоге, вы можете использовать « pwd », чтобы показать ваш текущий путь.
Если вы знаете имя файла или его часть, вы можете использовать « find », чтобы найти ваш файл.
find / -name things.jpeg