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

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

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

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

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

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

6 ответов

Решение

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

#!/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).

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

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

#!/bin/bash
gedit myfile.txt

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

chmod +x test.sh

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

./test.sh

Может быть, gnome-open вместо xdg-open

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

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

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

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

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

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. щелкнув левой кнопкой мыши на скрипте, вам просто нужно выбрать "Выполнить" вместо "Выполнить в терминале"

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

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

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

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

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

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

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

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

Другие вопросы по тегам