जवाबों:
आप उपयोग कर सकते हैं 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
, ज़ाहिर है, लेकिन आप वैसे भी केवल अपने आदेश का नाम लिखकर दूसरों को चलाने में सक्षम नहीं होंगे।
यदि आप यह निर्धारित करने के लिए एक सरल तरीके की तलाश कर रहे हैं कि ओएस एक्स (जीयूआई) एप्लिकेशन बंडल कहां स्थापित है (जैसा कि open
कमांड द्वारा उपयोग किया जाता है ), तो आप कमांड लाइन से निम्न लघु AppleScript निष्पादित कर सकते हैं:
$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app
इसके लिए आवश्यक है कि प्रश्न (उदाहरण में सफ़ारी) कार्यक्रम चल रहा हो।
यह वह विधि है जो मैं वर्तमान में OSX और लिनक्स में फ़ायरफ़ॉक्स एप्लिकेशन डायरेक्टरी का पता लगाने के लिए करता हूँ। किसी अन्य एप्लिकेशन को अपनाना आसान होना चाहिए। OSX 10.7, उबंटू 12.04, डेबियन जेसी पर परीक्षण किया गया
#!/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
और type -P
नहीं? क्या गैर- OSX कोड OS X पर काम करता है? यदि नहीं, तो आप समझा सकते हैं कि क्यों नहीं? यदि हाँ, तो आपके पास दो संस्करण क्यों हैं?
/bin
या /usr/bin
, आदि लेकिन बजाय करने के लिए स्थापित /Applications/My3rdPartyApp.app
और बाइनरी एक उपनिर्देशिका में संग्रहीत किया जाता है Contents/MacOS
यह काफी बनाने किसी भी क्रॉस-प्लेटफ़ॉर्म तकनीकों का उपयोग करना मुश्किल है ताकि आवेदन का स्थान निर्धारित किया जा सके (इसलिए इसका उपयोग lsregister
) इससे भी बदतर, OSX निर्देशिका संरचना संसाधनों से एक अलग स्थान में बाइनरी रखती है। ऊपर का स्निपेट फ़ायरफ़ॉक्स की defaults/pref
डायर का पता लगाने में सहायता करने के लिए लिखा गया था ।
/usr/bin/firefox
वास्तव में फ़ायरफ़ॉक्स बाइनरी नहीं है, इसलिए मैं readlink
यह पता लगाने के लिए आउटपुट का उपयोग करता हूं कि यह कहां इंगित करता है, और फिर defaluts/prefs
वहां से निर्देशिका ढूंढें । एक तरफ ध्यान दें, सहानुभूति के बारे में: ls -al /usr/bin/* |grep -- '->' |wc -l
उस निर्देशिका में लगभग 303 बायनेरिज़ का चित्रण करना मेरा उबंटू कॉन्फ़िगरेशन वास्तव में सिम्बलिंक है। (उनमें से लगभग 16%) इस कारण से, उपरोक्त कोड ** को अंततः बाइनरी के लिए कैनोनिकल पथ का पता लगाने तक सिम्बिल्स को पुनरावर्ती रूप से हल करने के लिए संशोधित किया जाना चाहिए।
type -P
प्रश्न का उत्तर देने के लिए , मैं इस प्रश्न के उत्तर के लिए पर्याप्त रूप से परिचित नहीं हूं। शायद आप थोड़ा विस्तार कर सकें। :)
type
बायनेरिज़ का मार्ग $PATH
चर में संदर्भित है ।
आप इसकी सामग्री को देख सकते हैं env
।
$PATH
साथ ही देखा जा सकता है env
, लेकिन echo $PATH
कम क्रिया होगी।
आप अपने सभी उपनामों को सूचीबद्ध करने के लिए टर्मिनल में " उपनाम " आदेश का उपयोग कर सकते हैं । या यदि आप एक निर्देशिका में हैं, तो आप अपना वर्तमान मार्ग दिखाने के लिए " pwd " का उपयोग कर सकते हैं ।
यदि आप फ़ाइल नाम या फ़ाइल नाम का एक भाग जानते हैं, तो आप अपनी फ़ाइल का पता लगाने के लिए " खोज " का उपयोग कर सकते हैं ।
find / -name things.jpeg
MAC (OS X) पर आप कर सकते हैं:
अब आप कमांड लाइन पर अपने आवेदन का पूरा रास्ता देख सकते हैं और यदि आप चाहें तो इसे वहां से चला सकते हैं।
से लिया wikiHow