Yanıtlar:
Sen kullanabilirsiniz type
ve which
belirli bir komut ne olduğunu belirlemek için bash
onu bulunduğu bir uygulama, eğer, ve.
$ 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
Komutlar which
ve elbette type -P
sadece programlarınız için çalışır PATH
, ancak yine de komut adlarını yazarak başkalarını çalıştıramazsınız.
Bir OS X (GUI) uygulama paketinin nereye kurulduğunu belirlemenin basit bir yolunu arıyorsanız (örneğin open
komut tarafından kullanıldığı gibi ), komut satırından aşağıdaki kısa AppleScript'i yürütebilirsiniz:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
Bu, söz konusu programın (örnekte Safari) çalışmasını gerektirir.
Bu, şu anda OSX ve Linux'ta Firefox uygulama dizinini bulmak için kullandığım yöntemdir. Başka bir uygulamaya geçmesi kolay olmalıdır. OSX 10.7, Ubuntu 12.04, Debian Jessie üzerinde test edildi
#!/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
ve type -P
yapmayan bir şey var mı? OSX dışı kod OS X'te çalışıyor mu? Değilse, neden olmadığını açıklayabilir misiniz? Evet ise, neden iki versiyonunuz var?
/bin
veya /usr/bin
, vs yerine monte /Applications/My3rdPartyApp.app
ve ikili bir alt dizinde saklanır Contents/MacOS
bunu oldukça yapma uygulamanın konumunu belirlemek için herhangi bir çapraz platform tekniklerini kullanmak zor (bu nedenle kullanımı lsregister
) Daha da kötüsü, OSX dizin yapısı ikili dosyayı kaynaklardan ayrı bir konuma yerleştirir. Yukarıdaki snippet, Firefox'un defaults/pref
yönünü bulmanıza yardımcı olmak için yazılmıştır .
/usr/bin/firefox
aslında Firefox ikili değil, bu yüzden readlink
işaret ettiği yeri bulmak ve sonra defaluts/prefs
dizini oradan bulmak için çıktısını kullanıyorum . Yan notta, sembolik bağlantı hakkında: Bunu yapmak ls -al /usr/bin/* |grep -- '->' |wc -l
, bu dizindeki yaklaşık 303 ikili dosyayı gösterir, Ubuntu yapılandırmam aslında sembolik bağlantılardır. (yaklaşık% 16) Bu nedenle, yukarıdaki kod **, ikilinin kanonik yolunu bulana kadar sembolik bağlantıları yinelemeli olarak çözmek için değiştirilmelidir.
type -P
soruyu cevaplamak için, soruyu cevaplayacak bu komuta yeterince aşina değilim. Belki biraz ayrıntılandırabilirsiniz. :)
type
ilk (ve kabul) cevap temeli olduğu için. Komut olarak kullanıldığında, belirtilen adların nasıl yorumlanacağını gösteren bir kabuk yerleşiğidir. Oldukça çıplak kemik olan POSIX sürümü burada açıklanmaktadır . … (Devam ediyor)
Program çalışıyorsa,
ps -ef | grep PROGRAMM
$PATH
Değişkende ikili dosyaların yoluna başvurulur .
İçeriğini ile görebilirsiniz env
.
$PATH
ile görülebilir env
, ancak echo $PATH
daha az ayrıntılı olacaktır.
Tüm takma adlarınızı listelemek için terminaldeki " takma ad " komutunu kullanabilirsiniz . Veya bir dizindeyseniz , geçerli yolunuzu göstermek için " pwd " kullanabilirsiniz.
Dosya adını veya dosya adının bir bölümünü biliyorsanız, dosyanızı bulmak için " find " kullanabilirsiniz.
find / -name things.jpeg
MAC (OS X) üzerinde şunları yapabilirsiniz:
Artık komut satırında uygulamanızın tam yolunu görebilir ve isterseniz oradan çalıştırabilirsiniz.
Alındığı wikiHow'daki