bir uygulamada dosya açmak için `open` komutu


13

Neden bu komutu terminalimde çalıştıramıyorum:

open index.html

Bu dosyayı tarayıcımda açması gerekiyor muydu? Ayrıca ben bu komutu çalıştıramazsınız: open index.html -a "Sublime Text". Bu komutların sonucu:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
xdg-openDosyayı tarayıcınızda hangisinin açacağını kastettiğini varsayıyorum . openKomut bir bağlantıdır openvtkomuta ve yeni bir sanal konsolunda bir ikili açar. Görünüşe göre istediğin bu değil.
Marco

1
Bir OSX sisteminde olduğunuzu mu düşünüyorsunuz? openLinux'ta herhangi bir komut olduğuna inanmıyorum .
slm

1
@slm, Marco'nun işaret ettiği gibi open, Linux'ta aşağıdakilere bağlı bir komut var openvt; sorudaki hata mesajları bu durumla tutarlıdır.
Stephen Kitt

xdg-open dosyaadı_veya_URL
Ijaz Ahmad Khan

1
@EdgarOliveira Bir program (ikili) açmak istiyorsanız, adını terminale yazın. İlişkili bir programla bir dosya açmak istiyorsanız, kullanın xdg-open <file>ve dosyayı ilgili programla açmalısınız.
Marco

Yanıtlar:


19

OS X'in openkomutunun birincil amacı , ilgili uygulamada bir dosya açmaktır. Modern OSX dışı birimlerde buna eşdeğerdir xdg-open.

xdg-open index.html

xdg-openopen -abelirli bir uygulamada bir dosyayı açmak için eşdeğer OSX'lere sahip değildir . Bunun nedeni, bir uygulamadaki bir dosyayı açmanın normal yolunun, uygulamanın adını ve ardından dosyanın adını girmesidir. Daha doğrusu, uygulamayı uygulayan yürütülebilir programın adını yazmanız gerekir.

sublime_text index.html

Linux, diğer Unix sistemleri gibi (ama bildiğim kadarıyla OS X'in Unixy olmayan bölümleri) yazılımı bir paket yöneticisiyle izleyerek yönetir ve dosyaları tek tek kullanıldıkları yere koyar . Örneğin, tüm yürütülebilir programlar küçük bir dizin kümesinde bulunur ve bu dizinlerin tümü PATHdeğişkente listelenir ; çalışan , listelenen dizinlerde sublime_textçağrılan bir dosyayı arar . OS X, tek bir dizin ağacında paketinden çıkarılan ve bir uygulama veritabanına kaydedilen uygulamaları işlemek için fazladan bir dolaylama düzeyine ihtiyaç duyar . Linux'un herhangi bir uygulama veritabanı yoktur, ancak bir veritabanına ihtiyaç duymayacak şekilde düzenlenmiştir.sublime_textPATHopen -a

Komut sublime_textkabuğunu çalıştırmak sizin için işe yaramazsa, Yüce Metin düzgün yüklenmemiş demektir. Hiç kullanmadım ve görünüşe göre bir dağıtım paketi (örneğin deb veya rpm) olarak bir tar arşivi olarak geliyor, bu yüzden ekstra bir kurulum adımı yapmanız gerekiyor. Bunu otomatik hale getirmek gerçekten Sublime Text yapımcılarının işi, ancak bunu yapmadılarsa, komutu kendiniz çalıştırabilirsiniz.

sudo -s …/sublime_text /usr/local/bin

Elbette yürütülebilir dosyanın bulunduğu yolla değiştirin sublime_text.

Karşılaştığınız openkomut, openvtkomut için daha eski bir addır (bazı Linux dağıtımlarında yalnızca ad altında bulunur openvt). openvtKomut yeni yaratır sanal konsol sadece root tarafından yapılabilir ve çoğu insan sadece hiç bir grafik pencere ortamında çalışmak beri bu yüzyılda çok sık kullanılmaz.


ancak bu komutu çalıştırırsam "sublime_text indext.html" Bu sonucu alıyorum "sublime_text: komut bulunamadı" Bu soruna nasıl yol açabilirim?
Edgar Oliveira

@EdgarOliveira Sanırım sorunu görüyorum, görünüşe göre Sublime Text uygun bir paketle gelmiyor mu? Düzenlememe bakın.
Gilles 'SO- kötü olmayı bırak'

Bunun için bir takma ad oluşturdum: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' ama "sublimetext" i yürüttüğümde, sadece bir tane yerine iki pencere açtı! Neden? Teşekkürler
Edgar Oliveira

.Bashrc dosyasını değiştirdiğimde, "Değişiklikleri yaptığım aynı terminalde yeni bir takma ad çalıştırmak için .bashrc dosyası nasıl sıfırlanır?" Google ve Unix & Linux'ta cevabı buldu ve sadece "bash" komutunu uyguladınız ve sizinkinin yeni takma adını çalıştıracaksınız :)
Edgar Oliveira

7

Kullandığınız işletim sisteminden bahsetmiyorsunuz.

Bazı Linux dağıtımlarında openkomut, openvtyeni bir sanal konsolda ikili dosya açan komuta sembolik bir bağlantıdır . Görünüşe göre istediğin bu değil. Hata mesajlarınız gerçekten de openvtkomutu çağırdığınızı gösterir . Bu komut, bir program ikili (yürütülebilir) değişkenini bağımsız değişken olarak bekler.

Bunun xdg-openaksine openvt, çalıştırılabilir bir argüman olarak değil, bir programla ilişkili olan ve dosyayı programla açan bir dosya beklediğiniz anlamına gelir . Dosya ve URL'leri bağımsız değişken olarak iletebilirsiniz.

Bu nedenle xdg-open index.htmldosyayı tarayıcınızda xdg-open image.pngaçmalı, dosyayı resim görüntüleyicinizde vb. Açmalıdır.


1
Tek sorun xdg-open dosyayı filetype için varsayılan uygulamada açacaktır. Xdg-open ile uygulamayı seçemezsiniz. Uygulamayı seçmek için bir komut olup olmadığını bilmiyorum, ancak uygulamayı biliyorsanız (örneğin "Yüce Metin" örneğinde olduğu gibi) programı doğrudan çağırmak daha iyi olacaktır.
X3MBoy

1
@ X3MBoy Çağrının arkasındaki fikir , o dosya için varsayılan uygulamayı xdg-opençağırmaktır . Farklı bir program kullanmak istiyorsanız, arayın . Sorunu göremiyorum. <program> <file>
Marco

Yapması gereken bir komut istiyor: open index.html -a "Sublime Text" -Bu yüzden "problem" diyorum, çünkü xdg-openbir html dosyasını açmak için kullanırsanız , bu dosyanın "Sublime Text" gibi bir metin düzenleyicisi tarafından değil tarayıcı tarafından açılma olasılığının daha yüksek olması
X3MBoy

3

Her ne kadar insanlar genellikle xdg-openişlevselliğini taklit etmek olarak adlandırılsa da open, macOS openbiraz farklıdır, çünkü 1. stdout / stedrr'den bir şey yönlendirmez ve 2. terminalden çalıştırmak istediğiniz her şeyi ayırır (GUI'yi başlatırken neredeyse her zaman istediğiniz şeydir) etrafında terminaller bulunmaması için)

Bunu çözmek için, bazı standart GNU araçlarını kullanarak uygun bir eşdeğer buldum (sözdizimi balık kabuğudur, ancak bash'a dönüşüm önemsizdir):

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

Eklendi :

Bash kabuğunu kullananlar için işte burada:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

Benim çözümüm (günlük olarak kullanılır) aliasfor kullanmaktır xdg-open.

Sadece bunu şunun üzerine koy ~/.bashrc:

alias open='xdg-open '

Ardından kabuğunuzu kapatıp yeniden başlatın veya source ~/.bashrc.

Şimdi .png'den .jpg'den .docx'e .pdf'den .txt'ye kadar bu komutla herhangi bir dosyayı açabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.