টার্মিনালের কোনও প্রোগ্রামের পথ কীভাবে পাব?


23

আমি একটি অ্যাপ্লিকেশন ইনস্টল করেছি এবং এখন আমি মায়াপ্লিকেশন হিসাবে টার্মিনালের মাধ্যমে এটি অ্যাক্সেস করতে পারি। যদিও এটি একটি উপনাম। আমি কীভাবে ফাইলটির পুরো পথটি খুঁজে পেতে পারি?

উত্তর:


27

আপনি নির্দিষ্ট আদেশটি কী তা ব্যবহার করতে 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কমান্ডের সাহায্যে ব্যবহৃত ), আপনি কমান্ড লাইন থেকে নিম্নলিখিত সংক্ষিপ্ত অ্যাপলস্ক্রিপ্ট সম্পাদন করতে পারেন:

$ osascript -e 'tell application "System Events" to POSIX path of (file of process "Safari" as alias)'
/Applications/Safari.app

এটির প্রয়োজন যে প্রশ্নে থাকা প্রোগ্রামটি (উদাহরণে সাফারি) চলছে।


1
আপনার ওসাস্ক্রিপ্টের মতোই ফলাফলটি পাওয়ার কোনও উপায় আছে তবে প্রোগ্রামটি চলছে না?
ম্যাথিউ ওয়েস্টফাল

3

আমি বর্তমানে ওএসএক্স এবং লিনাক্সে ফায়ারফক্স অ্যাপ্লিকেশন ডিরেক্টরিটি সনাক্ত করার পদ্ধতিটি। অন্য অ্যাপ্লিকেশন গ্রহণ করা সহজ হওয়া উচিত। ওএসএক্স 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

এটি একটি চিত্তাকর্ষক ছানা uck এটি কি এমন কিছু করে typeএবং type -Pনা করে? নন-ওএসএক্স কোড ওএস এক্সে কাজ করে? যদি না হয় তবে আপনি কেন ব্যাখ্যা করতে পারবেন না? যদি হ্যাঁ, আপনার দুটি সংস্করণ থাকবে কেন?
জি ম্যান

1
@ জি-ম্যান: দরুন চরিত্র সীমাবদ্ধতার, আমি দুই অংশে এই উত্তর করব ... উপর ওএসএক্স, 3 য় পক্ষের অ্যাপ্লিকেশন ইনস্টল করা হয় না /binবা /usr/bin, ইত্যাদি কিন্তু এর পরিবর্তে ইনস্টল /Applications/My3rdPartyApp.appও বাইনারি একটি সাব-মধ্যে সংরক্ষিত হয় Contents/MacOSএটা বেশ উপার্জন অ্যাপ্লিকেশনটির অবস্থান নির্ধারণের জন্য কোনও ক্রস-প্ল্যাটফর্ম কৌশল ব্যবহার করা কঠিন (অতএব এর ব্যবহার lsregister) আরও খারাপ, ওএসএক্স ডিরেক্টরি কাঠামোটি বাইনারিটিকে সংস্থান থেকে পৃথক স্থানে স্থাপন করে। উপরের স্নিপেটটি ফায়ারফক্সের defaults/prefডির সনাক্ত করতে সহায়তা করার জন্য লেখা হয়েছিল written
tresf

উবুন্টুতে, /usr/bin/firefoxআসলে ফায়ারফক্স বাইনারি নয়, সুতরাং আমি readlinkযেখানে আউটপুটটি এটি নির্দেশ করি সেখানে এটি অনুসন্ধান করতে এবং তারপরে defaluts/prefsসেখান থেকে ডিরেক্টরিটি সন্ধান করি। একদিকে নোটে, সিমিলিংকিংয়ের বিষয়ে: করণটি সেই উক্ত ls -al /usr/bin/* |grep -- '->' |wc -lডিরেক্টরিটিতে প্রায় 303 বাইনারি চিত্রিত করে যা আমার উবুন্টু কনফিগারেশনটি আসলে প্রতিলিঙ্ক। (তাদের মধ্যে প্রায় ১%%) এই কারণে, উপরের কোড ** * অবশেষে সিমনলিকগুলি পুনরাবৃত্তভাবে সমাধান করার জন্য সংশোধন করা উচিত যতক্ষণ না এটি বাইনারিটিতে আধ্যাত্মিক পথটি খুঁজে পায়।
tresf

সর্বশেষে, type -Pপ্রশ্নের উত্তর দেওয়ার জন্য , আমি প্রশ্নের উত্তর দেওয়ার জন্য সেই আদেশের সাথে যথেষ্ট পরিচিত নই। সম্ভবত আপনি কিছুটা ব্যাখ্যা করতে পারেন। :)
tresf

বিস্তারিত প্রতিক্রিয়া জন্য ধন্যবাদ। (আপনি করতে চাইবেন সম্পাদনা যে তথ্য মধ্যে আপনার উত্তর।) আমি উল্লেখ typeকরা হয়েছে কারণ এটি প্রথম (& গৃহীত) উত্তর ভিত্তিতে ছিল। এটি একটি শেল বিল্টিন যা নির্দেশ করে যে নাম (গুলি) কমান্ড হিসাবে ব্যবহৃত হলে কীভাবে ব্যাখ্যা করা হবে indicates এটির পসিক্স সংস্করণ, যা বরং খালি-হাড়, এখানে বর্ণিত হয়েছে । … (চালিয়ে যাওয়া)
জি-ম্যান


0

বাইনারিগুলির পথটি চলকটিতে উল্লেখ করা হয় $PATH

এর সাথে এর সামগ্রী দেখতে পাবেন env



আপনার উত্তর সম্পূর্ণ পরিষ্কার নয়, দুঃখিত। "ওস এ ত্রুটি ... দুঃখিত" বলতে কী বোঝ? এছাড়াও এর $PATHসাথে দেখা যেতে পারে envতবে echo $PATHকম ভার্জোজ হবে।
স্ল্যাক করুন

0

আপনার সমস্ত এলিয়াসের তালিকা করতে আপনি টার্মিনালে " ওরফে " কমান্ড ব্যবহার করতে পারেন । অথবা আপনি যদি কোনও ডিরেক্টরিতে থাকেন তবে আপনার বর্তমান পথ দেখানোর জন্য আপনি " pwd " ব্যবহার করতে পারেন ।

যদি আপনি ফাইলের নাম বা ফাইলের একটি অংশ জানেন তবে আপনি নিজের ফাইলটি সনাক্ত করতে " সন্ধান " ব্যবহার করতে পারেন ।

find / -name things.jpeg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.