मैं टर्मिनल में एक कार्यक्रम के लिए रास्ता कैसे खोजूं?


26

मैंने एक एप्लिकेशन इंस्टॉल किया और अब मैं इसे टर्मिनल के माध्यम से एक्सेस कर सकता हूं। यह एक उपनाम है, हालांकि। मैं फ़ाइल का पूरा रास्ता कैसे पा सकता हूँ?

जवाबों:


30

आप उपयोग कर सकते हैं 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

इसके लिए आवश्यक है कि प्रश्न (उदाहरण में सफ़ारी) कार्यक्रम चल रहा हो।


1
क्या आपके ऑसस्क्रिप्ट के समान परिणाम प्राप्त करने का एक तरीका है, लेकिन प्रोग्राम को चलाने के बिना?
मैथ्यू वेस्टफेल

3

यह वह विधि है जो मैं वर्तमान में 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 पर काम करता है? यदि नहीं, तो आप समझा सकते हैं कि क्यों नहीं? यदि हाँ, तो आपके पास दो संस्करण क्यों हैं?
जी-मैन का कहना है कि 'मोनिका'

1
@ जी-मैन: कारण चरित्र सीमाओं के, मैं दो भागों में इस जवाब देंगे ... पर OSX, 3 पार्टी आवेदन करने के लिए स्थापित कर रहे हैं नहीं /binया /usr/bin, आदि लेकिन बजाय करने के लिए स्थापित /Applications/My3rdPartyApp.appऔर बाइनरी एक उपनिर्देशिका में संग्रहीत किया जाता है Contents/MacOSयह काफी बनाने किसी भी क्रॉस-प्लेटफ़ॉर्म तकनीकों का उपयोग करना मुश्किल है ताकि आवेदन का स्थान निर्धारित किया जा सके (इसलिए इसका उपयोग lsregister) इससे भी बदतर, OSX निर्देशिका संरचना संसाधनों से एक अलग स्थान में बाइनरी रखती है। ऊपर का स्निपेट फ़ायरफ़ॉक्स की defaults/prefडायर का पता लगाने में सहायता करने के लिए लिखा गया था ।
tresf

उबंटू पर, /usr/bin/firefoxवास्तव में फ़ायरफ़ॉक्स बाइनरी नहीं है, इसलिए मैं readlinkयह पता लगाने के लिए आउटपुट का उपयोग करता हूं कि यह कहां इंगित करता है, और फिर defaluts/prefsवहां से निर्देशिका ढूंढें । एक तरफ ध्यान दें, सहानुभूति के बारे में: ls -al /usr/bin/* |grep -- '->' |wc -lउस निर्देशिका में लगभग 303 बायनेरिज़ का चित्रण करना मेरा उबंटू कॉन्फ़िगरेशन वास्तव में सिम्बलिंक है। (उनमें से लगभग 16%) इस कारण से, उपरोक्त कोड ** को अंततः बाइनरी के लिए कैनोनिकल पथ का पता लगाने तक सिम्बिल्स को पुनरावर्ती रूप से हल करने के लिए संशोधित किया जाना चाहिए।
tresf

अंतिम, type -Pप्रश्न का उत्तर देने के लिए , मैं इस प्रश्न के उत्तर के लिए पर्याप्त रूप से परिचित नहीं हूं। शायद आप थोड़ा विस्तार कर सकें। :)
tresf

विस्तृत प्रतिक्रिया के लिए धन्यवाद। (आप उस जानकारी को अपने उत्तर में संपादित करना चाह सकते हैं ।) मैं उल्लेख करता हूं क्योंकि यह पहले (और स्वीकृत) उत्तर का आधार था। यह एक शेल बिल्डिन है जो इंगित करता है कि कमांड के रूप में उपयोग किए जाने पर निर्दिष्ट नाम की व्याख्या कैसे की जाएगी। इसका POSIX संस्करण, जो नंगे-हड्डियों का है, यहां वर्णित है । … (Cont'd)type
G-Man ने कहा कि Mon


0

बायनेरिज़ का मार्ग $PATHचर में संदर्भित है ।

आप इसकी सामग्री को देख सकते हैं env


ओएस में त्रुटि ... क्षमा करें: '(
user209678

आपका उत्तर पूरी तरह से स्पष्ट नहीं है, क्षमा करें। "ओएस में त्रुटि ... क्षमा करें" के साथ आपका क्या मतलब है? इसके $PATHसाथ ही देखा जा सकता है env, लेकिन echo $PATHकम क्रिया होगी।
22:13 पर slhck

0

आप अपने सभी उपनामों को सूचीबद्ध करने के लिए टर्मिनल में " उपनाम " आदेश का उपयोग कर सकते हैं । या यदि आप एक निर्देशिका में हैं, तो आप अपना वर्तमान मार्ग दिखाने के लिए " pwd " का उपयोग कर सकते हैं ।

यदि आप फ़ाइल नाम या फ़ाइल नाम का एक भाग जानते हैं, तो आप अपनी फ़ाइल का पता लगाने के लिए " खोज " का उपयोग कर सकते हैं ।

find / -name things.jpeg

0

MAC (OS X) पर आप कर सकते हैं:

  1. खोजक में आवेदन का पता लगाएँ।
  2. एप्लिकेशन पर राइट-क्लिक करें और "पैकेज सामग्री दिखाएं" चुनें।
  3. निष्पादन योग्य फ़ाइल का पता लगाएँ: आमतौर पर, यह सामग्री → MacOS में है, और अनुप्रयोग के समान नाम है।
  4. उस फाइल को अपनी रिक्त टर्मिनल कमांड लाइन पर खींचें।

अब आप कमांड लाइन पर अपने आवेदन का पूरा रास्ता देख सकते हैं और यदि आप चाहें तो इसे वहां से चला सकते हैं।

से लिया wikiHow

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.