2009-03-19 8 views
5

Tôi đang chạy một số tập tin thực thi trong khi kết nối với một hộp máy chủ Unix địa phương.Cách tìm đường dẫn từ nơi quy trình/thực thi hiện tại đang chạy?

Giả sử, tôi đang cố gắng chạy tệp thực thi 'abc'. Bây giờ máy chủ có thể đã cung cấp bí danh cho 'abc' .. Làm cách nào để tôi biết đường dẫn này? Như trong, nếu tôi gọi 'abc', nó có thể thực sự chạy nó từ, nói,/opt/corp/xyz/abc .. Làm thế nào để tôi biết được từ đường dẫn nào tôi gọi thực thi?

Bằng cách này tôi đang chạy trên HP-UX: D

Trả lời

10

"which abc" để hiển thị mà abc bạn sẽ được gọi

hoặc "alias" để liệt kê các bí danh

lẽ "echo $ 0 "từ bên trong tập lệnh hoặc truy xuất argv [0] theo cách khác.

2

HP-UX có lệnh "which" không? Chạy:

which abc 

Nếu bạn có nó, lệnh which sẽ cho bạn biết abc chương trình sẽ diễn ra từ $PATH của bạn.

4

Nếu bạn đang chạy bằng cách sử dụng biến môi trường PATH, bạn có thể thử:

$ which abc

hoặc

$ whereis abc

Nếu có một liên kết tượng trưng cho các lệnh và bạn muốn biết " thực tế " mục tiêu, bạn có thể sử dụng một cái gì đó như:

 
$ readlink /opt/corp/xyz/abc 

tôi không có quyền truy cập vào một hệ thống HPUX trước mặt tôi ngay bây giờ, nhưng điều này sẽ làm việc:

$ ls -l /opt/local/bin/wish 
lrwxr-xr-x 1 root admin 22 Feb 3 21:56 /opt/local/bin/[email protected] -> /opt/local/bin/wish8.5 
$ readlink /opt/local/bin/wish 
/opt/local/bin/wish8.5 

Nếu lệnh được dựa trên một bí danh, sau đây sẽ tiết lộ những nét bí danh.

 
$ alias abc 

tùy thuộc vào cách hệ thống của bạn được định cấu hình, các lệnh trên sẽ cung cấp câu trả lời cho nhiều biến thể câu hỏi của bạn.

trong Perl:

$running_script = $0; 

từ Python, xem SO How to get filename of the __main__ module in Python?

1

Từ một thiết bị đầu cuối dòng lệnh:

$ mà abc

/opt/corp/xyz/abc

2

Cảm ơn tất cả! 'đó' là người bán hàng mà tôi đã theo đuổi! Bây giờ tôi đang facepalming bản thân mình như tôi đã biết lệnh (trong Ubuntu) .. Và nó hoạt động như một sự quyến rũ trong HP-UX!

CHỈNH SỬA: 'whereis' được đề xuất bởi popcnt thậm chí còn phù hợp hơn! Thanx rất nhiều người!

+0

nếu bạn thích, tiếp tục và +1 nó, và nếu thỏa đáng, bạn có thể đánh dấu nó là câu trả lời cho câu hỏi của bạn. Đó thường là những gì bạn sẽ thấy ở đây trên SO, thay vì một "câu trả lời" từ poster gốc. – popcnt

1

Cách đúng để có được con đường của một kịch bản trên Unix là:

dir=$(cd $(dirname "$0"); pwd) 

Bối cảnh: $ 0 là tên file + đường dẫn của kịch bản tương đối so với thư mục hiện hành. Nó có thể tuyệt đối (/...) hoặc tương đối (../, dir/...). Vì vậy, $(dirname "$0") trả về đường dẫn (không có tên tệp). Tâm trí các dấu ngoặc kép; "$ 0" có thể chứa khoảng trắng và các công cụ lạ khác.

Chúng tôi sau đó cd vào thư mục đó và pwd sẽ trả lại đường dẫn tuyệt đối mà chúng tôi kết thúc.

Làm việc cho kshbash.

Trong chương trình C, bạn nên kiểm tra argv[0]. Tôi không chắc liệu vỏ sẽ đặt con đường hoàn chỉnh trong đó. Nếu bạn gặp sự cố, tôi khuyên bạn nên bao bọc tệp thực thi của mình trong một tập lệnh nhỏ chuẩn bị môi trường và sau đó gọi tệp thực thi của bạn với:

exec "$dir/"exe "[email protected]"