Bagaimana cara membuka file dari dalam skrip bash?

22

Ok, jadi berlari gedit myfile.txtberfungsi dengan baik. Tapi bagaimana dengan membuka file dari dalam skrip bash, menggunakan aplikasi desktop default yang terhubung dengan tipe file?

Saya sudah mencoba di bawah ini, yang bekerja sangat baik ketika dijalankan secara manual di terminal, tetapi ketika saya meletakkannya di file bash, tidak ada yang terjadi:

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

Apa yang harus saya lakukan?

Harap dicatat bahwa saya perlu file tetap terbuka setelah terminal ditutup juga.

Industri
sumber
1
coba berikan path file .. dan Anda yakin harus dengan tanda kutip? Coba tanpa tanda kutip
abhishek
7
Apakah Anda yakin perintah itu tidak melakukan apa-apa? Saya baru saja membuat skrip dengan konten yang Anda daftarkan, dan dibuka geditdengan file yang terdaftar (atau membuka tab baru di sesi yang ada). Itu kembali segera, daripada memblokir sampai program keluar.
James Henstridge
3
Selain itu, kesalahan apa yang Anda dapatkan saat menjalankan skrip dari terminal?
Takkat
Ya. Saya menggunakan path lengkap ke file dalam skrip saya tetapi dihapus di sini untuk menjelaskan. Tidak ada perbedaan dengan atau tanpa penawaran. Saya sudah mencoba xtg-openpada *.txt, *.htmldan banyak lagi - hanya wont work.
Industri
5
@abhishek: Tidak ada kasus di mana kutipan berbahaya dalam situasi seperti itu, dan banyak kasus di mana menghilangkan tanda kutip dapat menyebabkan masalah. Ini adalah praktik yang baik untuk membiasakan diri selalu mengutip semua string, bahkan ketika tidak perlu, kecuali Anda memiliki alasan khusus untuk tidak melakukannya.
Scott Severance

Jawaban:

16

Saya pikir skrip Anda harus berfungsi. Tetapi Anda dapat menambahkan sesuatu untuk mendapatkan informasi lebih lanjut:

#!/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"

saat menjalankan skrip ini (bernama my_open.sh) di terminal seperti ini:

my_open.sh path/to/somefile.txt

Saya mendapatkan output berikut:

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

yang memberitahu saya bahwa path ke file tersebut ok, mimetype dikenali dan desktopfile yang digunakan untuk membuka file juga ok. Dan gedit terbuka dengan file yang dimaksud.

Sekarang ketika dijalankan pada file lain:

my_open.sh path/to/README

Saya mendapatkan output berikut:

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

Perhatikan mimetype yang berbeda dan file desktop yang hilang. Namun demikian, xdg-open membuka default untuk semua file teks (gedit).

Jadi, Anda mungkin ingin menambahkan sesuatu seperti ini ke skrip Anda dan melihat apakah Anda mendapatkan hasil yang tidak terduga (yang kemudian dapat Anda tambahkan ke pertanyaan Anda ...).

xubuntix
sumber
baik, kecuali untuk berisik finished scriptpada akhirnya. Saya merekomendasikan [ catb.org/~esr/writings/taoup/html/ [ ( Seni Pemrograman Unix), aturan keheningan. Btw.: Backticks sudah usang - lebih suka $ (...) sebagai gantinya, yang nestable.
pengguna tidak diketahui
2
baik, skrip dimaksudkan untuk memberikan informasi tambahan. Informasi yang diberikan oleh 'skrip selesai' adalah bahwa Anda tidak perlu nohupatau &, tetapi itu xdg-openkembali dan memungkinkan Anda melanjutkan.
xubuntix
Untuk itulah prompt ditujukan.
pengguna tidak diketahui
3
benar. hanya berpikir akan lebih jelas seperti itu. sebenarnya, keseluruhan skrip tidak diperlukan, karena skrip ini tidak lebih dari yang xdg-opensudah ada, jadi ini bukan skrip kualitas produksi ...
xubuntix
5

Jadikan bash script test.sh sebagai:

#!/bin/bash
gedit myfile.txt

Kemudian, buat skrip tersebut dapat dieksekusi sebagai:

chmod +x test.sh

Terakhir, jalankan skrip sebagai:

./test.sh
choc
sumber
Terima kasih atas jawaban Anda, tetapi sayangnya saya perlu membuka editor file default GNOME untuk file seperti yang disebutkan di atas.
Industri
3

Mungkin gnome-open bukannya xdg-open

Denis
sumber
Saya menemukan solusi ini paling berhasil
Jon
Bagaimana jika pengguna tidak menggunakan Gnome?
Goddard
2

Anda pergi ke arah yang benar. Jika Anda ingin aplikasi gui tetap terbuka ketika Anda menutup jendela terminal maka Anda hanya perlu menambahkannya nohupdi awal baris.

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

Jika aplikasi gui tidak membuka, mungkin karena Anda tidak memiliki DISPLAYvariabel lingkungan yang ditetapkan di shell yang Anda coba jalankan. Coba lakukan gema$DISPLAY

Menandai
sumber
3
xdg-open tidak membutuhkan nohupatau&
xubuntix
0

Bagian pertama dari pertanyaan Anda

dengan perintah catAnda dapat membuka file di dalam terminal, jika itu yang Anda inginkan (dinyatakan di bagian pertama pertanyaan Anda).

untuk menggunakannya Anda cukup mengetik cat FILENAME.

Informasi lainnya

Jika Anda memerlukan lebih banyak perintah: Ini daftar Perintah yang bagus.

Editor default GNOME

Jika Anda ingin membuka file di aplikasi default GNOME gedit.

untuk menggunakannya, cukup ketik gedit FILENAME

Alvar
sumber
Itu membuka file di terminal, tetapi bukan editor default GNOME
Industrial
@industrial mengedit jawaban saya.
Alvar
Sayangnya, pekerjaan terbuka juga tidak akan ...
Industrial
@Industrial Apa yang Anda minta? jelaskan pertanyaan Anda lebih lanjut! Anda mengatakan beberapa hal berbeda dan saya telah menjawab salah satu dari mereka tetapi Anda mengatakan Anda tidak ingin menggunakannya ...
Alvar
@Industrial editor teks default di GNOME adalah gedit alias "editor teks" jadi jika Anda menjalankan gedit file.filetypeAnda akan membuka file seperti yang Anda inginkan!
Alvar
0

Meskipun saya tidak yakin apa yang benar-benar harus dicapai di sini & berdasarkan pada beberapa komentar baru-baru ini bahwa satu skrip harus membuka file APA SAJA dalam aplikasi default atau sejauh mana aplikasi mendukung ini.

Jika demikian maka cara termudah untuk melakukannya adalah dengan membuka terminal & akan scriptname / path / ke / nama file atau jika ada spasi di path maka scriptname '/ path / ke / nama file'

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

Gunakan ini sebagai skrip, Anda dapat menggunakan nama yang Anda inginkan untuk skrip, saya akan menggunakan openit1 sebagai contoh. Cara terbaik adalah menggunakan skrip langsung dari ~ / bin untuk menambahkan nomor ke nama sehingga tidak ada konflik dengan perintah linux yang ada

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

Tutup gedit & di terminal

chmod u+x ~/bin/openit1

Mulai ulang untuk menambahkan ~ / nampan ke $ PATH Anda

Untuk memohon buka terminal dan pergi

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

JIKA seperti yang dinyatakan & gunakan orig. skrip untuk satu file tertentu per skrip & dijalankan oleh d. klik kiri pada skrip Anda hanya perlu memilih " Jalankan " daripada "Jalankan di Terminal"

doug
sumber
Restart to add ~/bin to your $PATH- uhm, kebiasaan Windows lama? ;)
pengguna tidak diketahui