Bir bash betiğinin içinden bir dosyayı nasıl açarım?


22

Tamam, koşmak gedit myfile.txtiyi çalışıyor. Fakat ne bir dosyayı bir bash betiğinin içinden, filetipe bağlı varsayılan masaüstü uygulamasını kullanarak açmaya?

El ile terminalde çalıştırdığınızda harika çalışan aşağıda denedim, ancak bir bash dosyasına koyduğumda hiçbir şey olmuyor:

#!/bin/bash
xdg-open "myfile.txt"&

Bunun yerine ne yapmalıyım?

Lütfen, terminal de kapatıldıktan sonra dosyanın açık kalmasına ihtiyacım olduğunu unutmayın.


1
dosyanın yolunu sağlamayı deneyin .. ve tırnak işaretleri arasında olması gerektiğine emin misiniz? Tırnak işareti olmadan deneyin
abhishek

7
Komutun hiçbir şey yapmadığından emin misin? Yeni listelediğiniz içeriğe sahip bir komut dosyası oluşturdum ve geditlistelenen dosyayla açılıyor (veya varolan bir oturumda yeni bir sekme açılıyor). Program çıkana kadar engellemek yerine hemen geri döner.
James Henstridge,

3
Ayrıca betiğinizi bir terminalden çalıştırırken hangi hataları alıyorsunuz?
Takkat

Evet. Komut dosyamdaki dosyanın tam yolunu kullanıyorum ancak açıklığa kavuşturmak için burayı kaldırdım. Tırnaklı veya tırnaksız fark yok. Denedim xtg-openüzerinde *.txt, *.htmlsadece alışkanlık iş - daha.
Endüstriyel

5
@ abhishek: Bu gibi durumlarda alıntıların zararlı olduğu durumlar yoktur ve alıntıları atlamanın sorunlara yol açabileceği birçok durum vardır. Gerekmediğinde bile, tüm gerekçeleri alıntı yapma alışkanlığı haline getirmek, gerekmediğiniz sürece özel bir nedeniniz yoksa, iyi bir uygulamadır.
Scott Severance

Yanıtlar:


16

Senaryonun çalışması gerektiğini düşünüyorum. Fakat biraz daha bilgi almak için buna bir şeyler ekleyebilirsiniz:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

Bu betiği çalıştırarak (my_open.sh) şöyle bir uçbirimde:

my_open.sh path/to/somefile.txt

Aşağıdaki çıktıyı alıyorum:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

Bu bana dosya yolunun tamam olduğunu söyler, mimetype tanınır ve dosyayı açmak için kullanılan desktop dosyası da tamamdır. Ve gedit söz konusu dosyayla açılıyor.

Şimdi başka bir dosyada çalıştırdığınızda:

my_open.sh path/to/README

Aşağıdaki çıktıyı alıyorum:

opening file  path/to/README  of type  text/x-readme with
finished script

Farklı mime türünü ve eksik masaüstü dosyasını not alın. Bununla birlikte, xdg-open tüm metin dosyaları için varsayılanı açar (gedit).

Dolayısıyla, betiğinize böyle bir şey eklemek ve beklenmedik bir çıktı alıp almadığınızı görmek isteyebilirsiniz (ki bu sorunuza ekleyebilirsin ...).


para cezası, finished scriptsonunda gürültülü hariç . Sessizliğin kuralı olan [ catb.org/~esr/writings/taoup/html/resini ( Unix Programlama sanatı) öneririm . Btw .: Backticks kullanımdan kaldırıldı - bunun yerine $ (...) tercih edilebilir, ki bu değişken.
kullanıcı bilinmeyen

2
Peki, komut dosyası ek bilgi vermek içindir. 'Tamamlanmış komut dosyası' tarafından verilen bilgi, sizin nohupveya ihtiyacınız olmadığının &, ancak xdg-opengeri dönen ve devam etmenize izin veren bir şeydir .
xubuntix

İstemi bunun için kastedilmiştir.
kullanıcı bilinmeyen

3
doğru. Sadece bu şekilde daha açık olacağını düşündüm. aslında, tüm senaryoya ihtiyaç duyulmaz, çünkü xdg-openzaten olduğundan daha fazla değildir , bu yüzden bu zaten bir üretim kalitesi senaryosu değildir ...
xubuntix

5

Test.sh adlı bir bash betiği yapın:

#!/bin/bash
gedit myfile.txt

Ardından, komut dosyasını aşağıdaki gibi çalıştırılabilir duruma getirin:

chmod +x test.sh

Son olarak, betiği şu şekilde çalıştırın:

./test.sh

Cevabınız için teşekkürler, fakat maalesef yukarıda belirtilen dosya için GNOME’un varsayılan dosya düzenleyicisini açmam gerekiyor.
Endüstriyel

3

Belki xdg-open yerine gnome -open


Bu çözümün en iyi şekilde çalıştığını gördüm
Jon

Ya kullanıcı Gnome'da değilse?
Goddard

2

Doğru yöne gidiyorsun. Terminal penceresini kapattığınızda gui uygulamasının açık kalmasını istiyorsanız nohup, satırın başına bir tane eklemeniz gerekir .

#!/bin/bash
nohup xdg-open "myfile.txt"&

Eğer GUI uygulaması muhtemelen açılmıyorsa DISPLAY, kabuktaki ortam değişkenine sahip olmadığınız için başlatmaya çalışıyorsunuzdur. Bir yankı yapmayı dene$DISPLAY


3
ne gerektirir xdg açık nohupne de&
xubuntix

0

Sorunuzun ilk kısmı

Komut ile catterminalin içinde bir dosya açabilirsiniz, istediğiniz buysa (sorunuzun ilk bölümünde belirtilir).

kullanmak için sadece yazabilirsiniz cat FILENAME.

Diğer bilgiler

Daha fazla komuta ihtiyacınız varsa: İşte Komutların iyi bir listesi.

GNOME varsayılan editörü

GNOME'un varsayılan uygulamasında dosyayı açmak istiyorsanız gedit.

kullanmak için, sadece yazın gedit FILENAME


Bu dosyayı terminalde açar, ancak GNOME’un varsayılan editörü değildir
Industrial

@ industrial cevabımı düzenledi.
Alvar

Ne yazık ki, açık alışkanlık iş ya ...
Sanayi

@Endüstriyel Ne istiyorsun? Sorunuzu daha fazla açıklayın! birkaç farklı şey söylüyorsun ve ben onlardan birini cevapladım ama kullanmak istemediğini söylüyorsun ...
Alvar

Gnome varsayılan metin editörü @Industrial olan çalıştırmak eğer öyleyse "metin editörü" aka gedit gedit file.filetypeistediğiniz gibi dosyayı açacak!
Alvar

0

Burada gerçekten neyin başarılacağından emin değilim ve bazı yeni yorumlara dayanarak , tek bir komut dosyasının herhangi bir varsayılan dosyada HERHANGİ bir dosyayı açması veya uygulamanın bunu desteklediği ölçüde açıklanması gerekir.

Eğer öyleyse , bunu yapmanın en kolay yolu, bir terminali açarak ve scriptname / path / to / filename ya da path içerisinde herhangi bir boşluk varsa, komut dosyası '/ path / to / filename' olur.

cd; mkdir -p bin && gedit ~/bin/openit1

Bunu komut dosyası olarak kullanın, komut dosyası için istediğiniz herhangi bir adı kullanabilirsiniz, örnek olarak openit1 kullanacağım. İsmi bir sayı eklemek için doğrudan ~ / bin'den komut dosyaları kullanırken en iyisidir, bu nedenle varolan linux komutlarıyla çakışmaz

#!/bin/bash
xdg-open "$1"

Gedit'i kapat ve terminalde

chmod u+x ~/bin/openit1

$ PATH'nize ~ / bin eklemek için yeniden başlayın

Bir terminal açıp çağırmak

openit1 /path/to/filename or openit1 'path/to/filename' 

Orig olarak belirtilmişse ve orig kullanılarak. komut dosyası başına belirli bir dosya için komut dosyası ve çağırmak d. betiğe sol tıklayarak "Terminalde Çalıştır " yerine " Çalıştır " ı seçmeniz yeterlidir


Restart to add ~/bin to your $PATH- Eski Windows alışkanlıkları? ;)
kullanıcı bilinmeyen
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.