Как открыть файл из скрипта bash?


22

Итак, бег gedit myfile.txtработает хорошо. Но как насчет открытия файла внутри скрипта bash с использованием стандартного настольного приложения, связанного с типом файла?

Я попробовал ниже, который прекрасно работает при запуске вручную в терминале, но когда я помещаю его в файл Bash, ничего не происходит:

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

Что я должен сделать вместо этого?

Обратите внимание, что мне нужно, чтобы файл оставался открытым и после закрытия терминала.


1
попробуйте указать путь к файлу .. и вы уверены, что он должен быть в кавычках? Попробуйте без кавычек
abhishek

7
Вы уверены, что команда ничего не делает? Я только что создал сценарий с содержимым, которое вы перечислили, и он открывается geditс перечисленным файлом (или открывает новую вкладку в существующем сеансе). Однако он возвращается немедленно, а не блокируется до выхода из программы.
Джеймс Хенстридж

3
Кроме того, какие ошибки вы получаете при запуске скрипта из терминала?
Таккат

Ага. Я использую полный путь к файлу в моем скрипте, но удалил его здесь, чтобы уточнить. Нет разницы с или без кавычек. Я пробовал xtg-openна *.txt, *.htmlи больше - просто не будет работать.
Промышленный

5
@abhishek: не бывает случаев, когда кавычки вредны в таких ситуациях, и множество случаев, когда опущение кавычек может вызвать проблемы. Хорошей практикой является всегда приводить в кавычки все строки, даже если они не нужны, если только у вас нет особых причин не делать этого.
Скотт Северанс

Ответы:


16

Я думаю, что ваш сценарий должен работать. Но вы можете добавить что-то к нему, чтобы получить немного больше информации:

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

при запуске этого скрипта (с именем my_open.sh) в терминале, например:

my_open.sh path/to/somefile.txt

Я получаю следующий вывод:

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

это говорит мне, что путь к файлу в порядке, mimetype распознается, и рабочий стол, который используется для открытия файла, также в порядке. И Gedit открывается с файлом, о котором идет речь.

Теперь при запуске на другом файле:

my_open.sh path/to/README

Я получаю следующий вывод:

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

Обратите внимание на другой mimetype и отсутствующий файл рабочего стола. Тем не менее, xdg-open открывает настройки по умолчанию для всех текстовых файлов (gedit).

Итак, вы можете захотеть добавить что-то подобное в ваш скрипт и посмотреть, получите ли вы неожиданный вывод (который вы затем можете добавить к своему вопросу ...).


хорошо, за исключением шумных finished scriptв конце. Я рекомендую [ catb.org/~esr/writings/taoup/html/]( Искусство программирования Unix) правило молчания. Кстати: обратные пометки устарели - вместо этого предпочитайте $ (...), что является вложенным.
пользователь неизвестен

2
ну, сценарий предназначен для предоставления дополнительной информации. Информация, предоставленная «готовым скриптом», вам не нужна nohupили &, но она xdg-openвозвращается и позволяет вам продолжить.
xubuntix

Вот для чего предназначен запрос.
неизвестный пользователь

3
правда. Просто подумал, что так будет более очевидно. на самом деле весь сценарий не нужен, потому что он делает не больше, чем xdg-openуже делает, так что в любом случае это не сценарий качества производства ...
xubuntix

5

Сделайте bash-скрипт test.sh как:

#!/bin/bash
gedit myfile.txt

Затем сделайте скрипт исполняемым как:

chmod +x test.sh

Наконец, запустите скрипт как:

./test.sh

Спасибо за ваш ответ, но, к сожалению, мне нужно открыть редактор файлов GNOME по умолчанию для файла, как указано выше.
Промышленный


2

Вы идете в правильном направлении. Если вы хотите, чтобы приложение GUI оставалось открытым, когда вы закрываете окно терминала, вам просто нужно добавить nohupв начале строки.

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

Если приложение с графическим интерфейсом не открывается, возможно, из-за того, что DISPLAYв оболочке не установлена переменная окружения, из которой вы пытаетесь его запустить. Попробуйте сделать эхо$DISPLAY


3
xdg-open не требует nohupни&
xubuntix

0

Первая часть вашего вопроса

с помощью команды catвы можете открыть файл внутри терминала, если это то, что вы хотите (об этом говорится в первой части вашего вопроса).

чтобы использовать его, вы можете просто напечатать cat FILENAME.

Дополнительная информация

Если вам нужно больше команд: вот хороший список команд.

GNOME редактор по умолчанию

Если вы хотите открыть файл в приложении по умолчанию GNOME gedit.

чтобы использовать это, просто наберите gedit FILENAME


Это открывает файл в терминале, но не редактор по умолчанию GNOME
Industrial

@industrial отредактировал мой ответ.
Алвар

К сожалению, open также не будет работать ...
Industrial

@ Промышленный Что ты просишь? объясни свой вопрос дальше! Вы говорите несколько разных вещей, и я ответил на один из них, но вы говорите, что не хотите его использовать ...
Алвар

@ Промышленный текстовый редактор по умолчанию в GNOME - это gedit aka «текстовый редактор», так что если вы запустите его, gedit file.filetypeвы откроете файл так, как хотите!
Алвар

0

Хотя я не уверен, что на самом деле должно быть достигнуто здесь, и основываясь на некоторых недавних комментариях, один скрипт должен открывать ЛЮБОЙ файл в приложении по умолчанию или в той степени, в которой это приложение поддерживает.

Если это так, то самый простой способ сделать это - открыть терминал и перейти к имени сценария / пути / к / имени файла или, если в пути есть пробелы, тогда имя сценария '/ пути / к / имени файла'

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

Используйте это как скрипт, вы можете использовать любое имя для скрипта, я буду использовать openit1 в качестве примера. Лучше всего использовать сценарии непосредственно из ~ / bin для добавления числа к имени, чтобы не конфликтовать ни с какими существующими командами Linux

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

Закройте Gedit & в терминале

chmod u+x ~/bin/openit1

Перезапустите, чтобы добавить ~ / bin в ваш $ PATH

Для вызова откройте терминал и зайдите

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

Если указано как оригинал и используется ориг. сценарий для одного конкретного файла для каждого сценария и вызова d. щелкнув левой кнопкой мыши на скрипте, вам просто нужно выбрать « Выполнить » вместо «Выполнить в терминале»


Restart to add ~/bin to your $PATH- Хм, старые привычки Windows? ;)
неизвестный пользователь
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.