Linux tương đương với lệnh mở Mac OS X INTERN [đóng]


214

Tôi đã thấy lệnh "mở" trong Mac OS X rất tiện dụng trong dòng lệnh. Từ "người đàn ông mở":

Các openlệnh mở một tập tin (hoặc một thư mục hoặc URL), cũng giống như khi bạn phải nhấn đúp chuột lên biểu tượng của tập tin. Nếu không có tên ứng dụng nào được chỉ định, ứng dụng mặc định như được xác định thông qua LaunchService được sử dụng để mở các tệp được chỉ định.

Đó là, nếu tôi muốn mở tệp PDF bằng trình xem PDF mặc định (tình cờ là Xem trước), tôi chỉ cần làm:

open my.pdf

Tuy nhiên, trong Linux, để mở tệp PDF từ dòng lệnh, tôi đã phải tìm khắp nơi để tìm trình xem PDF mặc định là "evince" (ai đã đoán ??), và sau đó

evince my.pdf

Vậy, có một lệnh tương đương đơn giản với lệnh 'mở' trong dòng lệnh Linux không?

Cảm ơn!


6
Có lẽ câu hỏi này nên được chuyển sang superuser.com?
quazgar

1
Siêu người dùng có vẻ không phù hợp - có StackOverflow cho "người dùng thông thường" hoặc có thể là "lập trình viên muốn kịch bản các ứng dụng khác", tức là tự động hóa?
Krazy Glew

Askubfox có thể phù hợp.
Gopherkhan

Câu trả lời:


238

Bạn có thể thử xdg-open, hầu hết các bản phân phối Linux đều có nó. Nó sẽ mở ứng dụng liên kết mặc định cho tập tin của bạn.

FYI https://portland.freedesktop.org/doc/xdg-open.html


13
openTuy nhiên, một sự khác biệt lớn giữa điều này và , tuy nhiên, là điều này không mở tệp / ứng dụng trong nền. Các ứng dụng Linux dường như rất trò chuyện và thường đưa ra nhiều dòng chẩn đoán và cảnh báo ngay vào thiết bị đầu cuối của bạn (mặc dù không có gì thực sự sai). Tôi thường phải làm một cái gì đó như xdg-open <file> &> /dev/null &thay thế. Có điều gì tốt hơn xdg-open về vấn đề này không?
Suan

13
@Suan: Nó mở ứng dụng trong "nền", tách ra khỏi thiết bị đầu cuối, theo cách bạn có thể tiếp tục làm việc trong thiết bị đầu cuối ngay khi ứng dụng được khởi chạy. Vì vậy, dấu vết &là không cần thiết. Đối với "nhiều dòng chẩn đoán", đó là từ chính ứng dụng, không phải từ xdg-open. Nếu bạn không muốn bất kỳ đầu ra nào, bạn &> /dev/nullthậm chí sẽ cần sử dụng evincetrực tiếp (ví dụ của OP), vì vậy khiếu nại của bạn là vô hiệu. xdg-openthực sự là con đường để đi
MestreLion

15
@MestreLion Tôi không nghĩ rằng khiếu nại hoàn toàn vô hiệu, vì việc mở của Mac không dẫn đến kết quả đầu ra của ứng dụng bị dội lại đến thiết bị đầu cuối.
Max Nanasy

7
@MaxNanasy: đầu ra là từ các ứng dụng, đó không phải xdg-openlà lỗi nếu chúng là trò chuyện. Và loại bỏ những tin nhắn như vậy nên là sự lựa chọn của người dùng , không phải của xdg. Vì vậy, đó là một khoảng trống phàn nàn để yêu cầu một cái gì đó "tốt hơn" xdg-open. Ngoài ra, nếu Mac openkhông có tùy chọn để ra những bài viết, tôi muốn nói rằng opentồi tệ hơn nhiều so với xdg-open, vì khi bạn sử dụng dòng lệnh để ra mắt các file bạn thường quan tâm đến đầu ra (nếu không, tại sao không chỉ đơn giản là nhấp đúp vào tập tin trong một trình duyệt như Nautilus?)
MestreLion

12
@MestreLion Mặc dù người ta có thể đưa ra trường hợp khiếu nại là không đáng kể, vì alias open='xdg-open &>/dev/null'mang lại xấp xỉ hành vi mong muốn (mặc dù lỗi từ xdg-open (trái ngược với chương trình đã khởi chạy) cũng sẽ bị tắt tiếng, điều không mong muốn).
Max Nanasy

76

Tương đương bạn đang tìm kiếm xdg-open, có thể được sử dụng giống như openlệnh của OS X. Ví dụ:

xdg-open ~/Documents/Chubby_Bubbies.odt

Tuy nhiên, điều này thực sự khó để gõ nhanh và chính xác. Thay vào đó, bạn nên tạo một bí danh cho xdg-open, điều này làm cho quá trình nhanh hơn nhiều.

Tất nhiên, bạn có thể đặt bí danh cho nó để openphù hợp với OS X (bạn có thể chọn bất cứ thứ gì bạn muốn), nhưng cá nhân tôi, tôi sử dụng dấu ngoặc vuông bên phải ( ]) cho phím tắt của tôi vì lý do tốc độ. Để sử dụng, hãy thêm phần sau vào .bashrctệp của bạn :

alias ']'='xdg-open'

Sau đó, để mở bất kỳ tài nguyên nào, hãy sử dụng nó như bất kỳ ví dụ nào sau đây:

] www.google.com
] file.txt
] ~/Pictures
] ssh://myserver.local/home/jeremy

Ngoài ra, điều này cho phép bạn mở một trình duyệt tệp (ví dụ Nautilus) trong thư mục hiện tại:

] .

Từ kinh nghiệm tôi đã thấy rằng các bí danh một chữ cái hoạt động tốt nhất cho các phím tắt ở trên. Rốt cuộc, mục tiêu là hiệu quả. Và bạn có thể quay lại và tạo bí danh tương tự trên OS X - Tôi để nó như một bài tập cho người đọc. :-)


26
Tôi đã tạo một bí danh từ 'open' thành 'xdg-open' để nó phù hợp với cả Linux và Mac.
Adam Byrtek

Đó là tốt nhưng không tuyệt vời, tôi đã cố gắng mở một tập tin .url và mở nó trong gedit.
sorin

18
@sorin Bạn đang cố gắng để làm cho âm thanh như thể đó là lỗi của tôi?!
Jeremy Visser

7
@sorin: xdg-openmở ứng dụng mặc định của hệ thống cho tệp. Trong trường hợp của bạn, .urlcác tệp được đặt để mở trong gedit. Nếu bạn muốn thay đổi điều đó, nhấp chuột phải vào tệp trong Nautilus và đi đến Thuộc tính> Mở bằng để thay đổi ứng dụng mặc định và xdg-opensẽ hoạt động tương ứng.
MestreLion

Đây là một Gist mà tôi đã thực hiện, chỉ cần sao chép-dán và thực thi lệnh trong phần 'Hoàn toàn' trong bình luận đầu tiên.
ozanmuyes

14

Tôi chỉ tự mình sắp xếp nó ra để nghĩ rằng tôi sẽ viết ra cách tôi đã làm nó, điều này đặc biệt liên quan đến những gì Suan yêu cầu. Các bước này cho phép bạn chỉ cần gõ "mở" và không phải thiết bị đầu cuối của bạn được bao phủ trong các tin nhắn bạn không cần:

Tạo một tập lệnh được gọi opentrong ~/bin, nội dung chỉ là:

xdg-open "$1" &> /dev/null &

Lưu và đóng tập lệnh, sau đó nhập "nguồn .profile" (hoặc .bash_profile nếu có liên quan). Vì vậy, gõ "Open Music" sẽ mở thư mục nhạc của bạn trong GUI nautilus và không nên nhập bất cứ thứ gì vào thiết bị đầu cuối của bạn.


Điều gì với bí danh và vị trí kỳ lạ? Chỉ cần gọi chính kịch bản openvà đặt nó vào PATH của bạn (thường là trong $HOME/bin/open)
tripleee

Trên máy của tôi (ubfox 11.10) nếu bạn thêm tập lệnh có tên 'open' vào đường dẫn của mình và cố gắng thực hiện theo cách đó, nó bị ghi đè bởi / bin / open. Vì vậy, tôi không thể tìm ra cách để bạn làm việc mà không có bí danh.
Anake

Bí quyết là để có tập lệnh riêng của bạn trong một thư mục xuất hiện sớm PATHhơn /bin. Theo quy ước, nếu bạn có $HOME/binnó, nó sẽ được thêm vào đầu PATH, trước bất kỳ thư mục hệ thống nào. Thông thường, điều này được thực hiện bởi .profilehoặc tương tự của bạn . Ví dụ, mặc định .profiletrên Ubuntu thực hiện chính xác điều này.
tripleee

2
Chuyển hướng đầu ra đến /dev/nulllà một chút thất thường; có lẽ bạn có thể chuyển hướng đầu ra đến $HOME/.xsession-errorshoặc một số thứ như vậy, để chẩn đoán không bị mất hoàn toàn trong trường hợp bạn cần khắc phục sự cố.
tripleee

1
@efdee: trích dẫn chính xác tất cả các biến là một thực hành lập trình tốt và quan trọng trong các tập lệnh bash. Điều này không có gì để làm xdg-open, đây là một vấn đề vỏ.
MestreLion

11

Theo truyền thống, bạn có thể sử dụng lệnh "thấy". Mà chỉ sử dụng run-mailcap. Điều này sẽ hoạt động mà không có Gnome và X, v.v.

man see

3
Vấn đề là run-mailcap(và nhiều bí danh của nó) sử dụng một cơ sở dữ liệu liên kết ứng dụng riêng biệt (và lỗi thời khủng khiếp). Ví dụ: trong hệ thống của tôi, trong khi .mp3các bài hát mở chính xác trong VLC, .txtcác tệp mở ít hơn (thay vì gedit) và .pdfcác tệp chỉ đơn giản là không mở được! (Lỗi: không tìm thấy quy tắc gửi thư "xem" cho loại "application / pdf")
MestreLion

Như tôi đã nói, nó phụ thuộc vào từng hệ thống. Rất ít ứng dụng tự đăng ký theo cách run-mailcapnhận ra chúng. xdg-opensử dụng nội bộ gvfs-open(trên các hệ thống Gnome như Ubuntu), lần lượt sử dụng thông số cơ sở dữ liệu mime của xdg, ứng dụng này sử dụng nhiều hơn.
MestreLion

Đã mở hơn 50 trang PDF gimpcho tôi. Tôi sẽ gắn bó với xdg-open.
dùng1717828

Mở tệp txt trong lessx''D
Timo

4

gnome-mở


7
gnome-open hiện không được chấp nhận và ngoài ra nó đã được sử dụng nội bộ bởi xdg-opennếu người dùng sử dụng Gnome (bây giờ nó sử dụng gvfs-open)
MestreLion

2

Nếu bạn có thiết lập mimes chính xác, bạn có thể sử dụng mimeopen. Kiểm tra trang người đàn ông của nó, vì nó có một số tùy chọn hữu ích.


1
Sẽ thật tốt nếu câu trả lời này được mở rộng. Tôi muốn biết làm thế nào nó hoạt động
Magnus

-3

Trong môi trường Gnome Desktop, tôi sử dụng lệnh sau:

nautilus `pwd` &

Điều này tương tự như "mở." lệnh trong Mac


11
Câu trả lời này có nhiều vấn đề: A) Nó mở thư mục hiện tại, không phải tệp, như người dùng yêu cầu. B), bạn có thể sử dụng .thay cho " pwd" C) nếu bạn thay đổi pwdcho một tập tin, người dùng vẫn sẽ cần phải nhấn ENTER sau khi Nautilus mở D) Mở nautilus đầu tiên chỉ dành riêng cho để mở tập tin là một giải pháp rất gián tiếp.
MestreLion
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.