Làm cách nào để tìm đường dẫn đến chương trình trong Terminal?


26

Tôi đã cài đặt một ứng dụng và bây giờ tôi có thể truy cập nó qua thiết bị đầu cuối dưới dạng ứng dụng. Đó là một bí danh, mặc dù. Làm thế nào tôi có thể tìm thấy đường dẫn đầy đủ đến tập tin?

Câu trả lời:


30

Bạn có thể sử dụng typewhichđể xác định một lệnh nào đó bashlà gì, và, nếu đó là một ứng dụng, nơi nó nằm.

$ 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

Các lệnh whichtype -Pchỉ hoạt động cho các chương trình trên của bạn PATH, tất nhiên, nhưng bạn sẽ không thể chạy người khác bằng cách chỉ cần gõ tên lệnh của họ.


Nếu bạn đang tìm kiếm một cách đơn giản để xác định nơi gói ứng dụng OS X (GUI) được cài đặt (như được sử dụng, ví dụ như openlệnh), bạn có thể thực thi AppleScript ngắn sau đây từ dòng lệnh:

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

Điều này đòi hỏi chương trình đang được đề cập (ví dụ về Safari) đang chạy.


1
Có cách nào để có được kết quả giống như osascript của bạn nhưng không có chương trình đang chạy không?
Mathieu Hampal

3

Đây là phương pháp tôi hiện đang định vị thư mục ứng dụng Firefox trong OSX và Linux. Nên dễ dàng chấp nhận cho một ứng dụng khác. Đã thử nghiệm trên 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

Đó là một đoạn mã ấn tượng. Nó có làm bất cứ điều gì typetype -Pkhông? Mã không phải OSX có hoạt động trên OS X không? Nếu không, bạn có thể giải thích tại sao không? Nếu có, tại sao bạn có hai phiên bản?
G-Man nói 'Phục hồi Monica'

1
@ G-Man: Do giới hạn về ký tự, tôi sẽ trả lời phần này thành hai phần ... Trên OSX, các ứng dụng của bên thứ 3 không được cài đặt /binhoặc /usr/bin, v.v. mà thay vào đó được cài đặt /Applications/My3rdPartyApp.appvà nhị phân được lưu trữ trong thư mục con Contents/MacOSlàm cho nó hoàn toàn khó sử dụng bất kỳ kỹ thuật đa nền tảng nào để xác định vị trí của ứng dụng (do đó sử dụng lsregister) Tệ hơn nữa, cấu trúc thư mục OSX đặt nhị phân ở một vị trí riêng biệt với các tài nguyên. Đoạn trích trên được viết để hỗ trợ xác định vị trí defaults/prefthư mục của Firefox .
tresf

Trên Ubuntu, /usr/bin/firefoxthực tế không phải là nhị phân Firefox, vì vậy tôi sử dụng đầu ra của readlinkđể xác định vị trí của nó, và sau đó tìm defaluts/prefsthư mục từ đó. Bên cạnh đó, về liên kết tượng trưng: Thực hiện ls -al /usr/bin/* |grep -- '->' |wc -lminh họa khoảng 303 nhị phân trong thư mục đó cấu hình Ubuntu của tôi thực sự là các liên kết tượng trưng. (khoảng 16% trong số họ) Vì lý do này, đoạn mã trên ** cuối cùng * nên được sửa đổi để giải quyết đệ quy liên kết cho đến khi tìm thấy đường dẫn chính tắc đến nhị phân.
tresf

Cuối cùng, để trả lời type -Pcâu hỏi, tôi không đủ quen thuộc với lệnh đó để trả lời câu hỏi. Có lẽ bạn có thể xây dựng một chút. :)
tresf

Cảm ơn đã phản ứng chi tiết. (Bạn có thể muốn chỉnh sửa thông tin đó thành câu trả lời của mình.) Tôi đề cập typevì đó là cơ sở của câu trả lời đầu tiên (& được chấp nhận). Nó là một phần tử dựng sẵn cho biết cách các tên được chỉ định sẽ được hiểu nếu được sử dụng như các lệnh. Phiên bản POSIX của nó, khá đơn giản, được mô tả ở đây . Tiết (Cont'd)
G-Man nói 'Phục hồi Monica'

3

Nếu chương trình đang chạy, hãy gọi

ps -ef | grep PROGRAMM

0

Đường dẫn của nhị phân được tham chiếu trong $PATHbiến.

Bạn có thể xem nội dung của nó với env.


lỗi trong os ... xin lỗi: '(
user209678

Câu trả lời của bạn không hoàn toàn rõ ràng, xin lỗi. Bạn có ý nghĩa gì với "lỗi trong os lỗi"? Ngoài ra $PATHcó thể được xem với env, nhưng echo $PATHsẽ ít dài dòng hơn.
slhck

0

Bạn có thể sử dụng lệnh " bí danh " trong thiết bị đầu cuối để liệt kê tất cả các bí danh của bạn. Hoặc nếu bạn đang ở trong một thư mục, bạn có thể sử dụng " pwd " để hiển thị đường dẫn hiện tại của mình.

Nếu bạn biết tên tệp hoặc một phần của tên tệp, thì bạn có thể sử dụng " tìm " để định vị tệp của mình.

find / -name things.jpeg

0

Trên MAC (OS X), bạn có thể làm:

  1. Xác định vị trí ứng dụng trong Finder.
  2. Nhấp chuột phải vào ứng dụng và chọn "Hiển thị nội dung gói."
  3. Xác định vị trí tệp thực thi: Thông thường, đây là trong Nội dung → MacOS và có cùng tên với ứng dụng.
  4. Kéo tập tin đó vào dòng lệnh Terminal trống của bạn.

Bây giờ bạn có thể thấy đường dẫn đầy đủ đến ứng dụng của bạn trên dòng lệnh và chạy nó từ đó nếu bạn muốn.

Lấy từ wikihow

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.