Làm cách nào để mở tệp từ bên trong tập lệnh bash?


22

Ok, vì vậy chạy gedit myfile.txthoạt động tốt. Nhưng những gì về việc mở một tệp từ bên trong một tập lệnh bash, bằng cách sử dụng ứng dụng máy tính để bàn mặc định được liên kết với kiểu tệp?

Tôi đã thử bên dưới, hoạt động rất tốt khi chạy thủ công trong thiết bị đầu cuối, nhưng khi tôi đặt nó vào tệp bash, không có gì xảy ra:

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

Tôi nên làm gì thay thế?

Xin lưu ý rằng tôi cũng cần mở tệp sau khi đóng thiết bị đầu cuối.


1
hãy thử cung cấp đường dẫn của tệp .. và bạn có chắc chắn nó phải có dấu ngoặc kép không? Hãy thử mà không có dấu ngoặc kép
abhishek

7
Bạn có chắc lệnh không làm gì? Tôi vừa tạo một tập lệnh với nội dung bạn liệt kê và nó sẽ mở ra geditvới tệp được liệt kê (hoặc mở một tab mới trong một phiên hiện có). Nó trả về ngay lập tức, thay vì chặn cho đến khi chương trình thoát.
James Henstridge

3
Ngoài ra, bạn gặp lỗi gì khi chạy tập lệnh của mình từ thiết bị đầu cuối?
Takkat

Vâng. Tôi sử dụng đường dẫn đầy đủ đến tập tin trong tập lệnh của mình nhưng đã xóa nó ở đây để làm rõ. Không có sự khác biệt có hoặc không có dấu ngoặc kép. Tôi đã thử xtg-opentrên *.txt, *.htmlvà nhiều hơn nữa - chỉ wont work.
Công nghiệp

5
@abhishek: Không có trường hợp nào trích dẫn có hại trong những tình huống như vậy, và rất nhiều trường hợp bỏ qua dấu ngoặc kép có thể gây ra vấn đề. Đó là một thực hành tốt để tạo thói quen luôn trích dẫn tất cả các chuỗi, ngay cả khi không cần thiết, trừ khi bạn có một lý do cụ thể không.
Scott Severance

Câu trả lời:


16

Tôi nghĩ kịch bản của bạn nên hoạt động. Nhưng bạn có thể thêm một cái gì đó vào nó để có thêm một chút thông tin:

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

khi chạy tập lệnh này (có tên my_open.sh) trong một thiết bị đầu cuối như thế này:

my_open.sh path/to/somefile.txt

Tôi nhận được đầu ra sau đây:

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

Nó cho tôi biết rằng đường dẫn đến tệp là ok, mimetype được nhận ra và desktopfile được sử dụng để mở tệp cũng tốt. Và gedit mở ra với các tập tin trong câu hỏi.

Bây giờ khi chạy trên một tệp khác:

my_open.sh path/to/README

Tôi nhận được đầu ra sau đây:

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

Lưu ý các mimetype khác nhau và tệp máy tính để bàn bị thiếu. Tuy nhiên, xdg-open mở mặc định cho tất cả các tệp văn bản (gedit).

Vì vậy, bạn có thể muốn thêm một cái gì đó như thế này vào tập lệnh của mình và xem liệu bạn có nhận được kết quả không mong muốn không (mà sau đó bạn có thể thêm vào câu hỏi của mình ...).


tốt, ngoại trừ sự ồn ào finished scriptcuối cùng. Tôi khuyên bạn nên [ catb.org/~esr/writings/taoup/html/ [( Nghệ thuật lập trình Unix), quy tắc im lặng. Btw.: Backticks không được dùng nữa - thay vào đó là $ (...), có thể lồng nhau.
người dùng không xác định

2
tốt, kịch bản có nghĩa là để cung cấp thêm thông tin. Thông tin được cung cấp bởi 'kịch bản hoàn thành' là bạn không cần nohuphoặc &, nhưng nó xdg-opensẽ trả về và cho phép bạn tiếp tục.
xubuntix

Đó là những gì gợi ý cho.
người dùng không xác định

3
thật. chỉ cần nghĩ rằng nó sẽ rõ ràng hơn theo cách đó. thực ra, toàn bộ tập lệnh là không cần thiết, vì nó không nhiều hơn xdg-openthế, vì vậy dù sao đây cũng không phải là tập lệnh chất lượng sản xuất ...
xubuntix

5

Tạo một tập lệnh bash test.sh như:

#!/bin/bash
gedit myfile.txt

Sau đó, làm cho tập lệnh thực thi như:

chmod +x test.sh

Cuối cùng, chạy tập lệnh dưới dạng:

./test.sh

Cảm ơn câu trả lời của bạn, nhưng thật không may, tôi cần mở trình chỉnh sửa tệp mặc định của Gnome cho tệp như đã đề cập ở trên.
Công nghiệp

3

Có thể gnome-open thay vì xdg-open


Tôi thấy giải pháp này hoạt động tốt nhất
Jon

Nếu người dùng không sử dụng Gnome thì sao?
Goddard

2

Bạn đang đi đúng hướng. Nếu bạn muốn ứng dụng gui vẫn mở khi bạn đóng cửa sổ terminal thì bạn chỉ cần thêm một nohupở đầu dòng.

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

Nếu ứng dụng gui không mở có lẽ vì bạn không có DISPLAYbiến môi trường được đặt trong trình bao bạn đang cố gắng khởi chạy nó. Hãy thử làm một tiếng vang$DISPLAY


3
xdg-open không yêu cầu nohupcũng không&
xubuntix

0

Phần đầu tiên của câu hỏi của bạn

với lệnh catbạn có thể mở một tệp bên trong thiết bị đầu cuối, nếu đó là những gì bạn muốn (nó được nêu trong phần đầu tiên của câu hỏi của bạn).

Để sử dụng nó, bạn chỉ cần gõ cat FILENAME.

Thông tin khác

Nếu bạn cần thêm lệnh: Đây là danh sách Lệnh tốt.

Trình chỉnh sửa mặc định Gnome

Nếu bạn muốn mở tệp trong ứng dụng mặc định của Gnome gedit.

để sử dụng nó, chỉ cần gõ gedit FILENAME


Điều đó sẽ mở tệp trong thiết bị đầu cuối, nhưng không phải là trình soạn thảo mặc định của Gnome
Công nghiệp

@industrial chỉnh sửa câu trả lời của tôi.
Alvar

Thật không may, mở sẽ không hoạt động ...
Công nghiệp

@ Nội địa Bạn đang yêu cầu gì? giải thích câu hỏi của bạn hơn nữa! bạn nói một số điều khác nhau và tôi đã trả lời một trong số đó nhưng bạn nói rằng bạn không muốn sử dụng nó ...
Alvar

@ Công nghiệp trình soạn thảo văn bản mặc định trong Gnome gedit hay còn gọi là "trình soạn thảo văn bản", vì vậy nếu bạn chạy, gedit file.filetypebạn sẽ mở tệp theo ý muốn!
Alvar

0

Mặc dù tôi không chắc những gì thực sự cần phải hoàn thành ở đây & dựa trên một số nhận xét gần đây rằng một tập lệnh sẽ mở BẤT K file tệp nào trong ứng dụng mặc định hoặc để phạm vi ứng dụng hỗ trợ điều này.

Nếu vậy thì cách dễ nhất để làm điều đó là bằng cách mở một terminal và đi scriptname / path / to / filename hoặc nếu có bất kỳ khoảng trắng nào trong đường dẫn thì scriptname '/ path / to / filename'

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

Sử dụng điều này như một tập lệnh, bạn có thể sử dụng bất kỳ tên nào bạn muốn cho tập lệnh, tôi sẽ sử dụng openit1 làm ví dụ. Tốt nhất khi sử dụng tập lệnh trực tiếp từ ~ / bin để thêm số vào tên để không xung đột với bất kỳ lệnh linux hiện có nào

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

Đóng gedit & trong thiết bị đầu cuối

chmod u+x ~/bin/openit1

Khởi động lại để thêm ~ / bin vào $ PATH của bạn

Để gọi mở một thiết bị đầu cuối và đi

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

NẾU như nguồn gốc đã nêu & sử dụng nguồn gốc. tập lệnh cho một tập tin cụ thể cho mỗi tập lệnh và gọi bởi d. nhấp chuột trái vào tập lệnh bạn chỉ cần chọn " Chạy " thay vì "Chạy trong Terminal"


Restart to add ~/bin to your $PATH- uhm, thói quen Windows cũ? ;)
người dùng không xác định
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.