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

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

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

#!/bin/bashxdg-open "myfile.txt"&

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

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

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

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

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

my_open.sh path/to/somefile.txt

Я получаю следующий результат:

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

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

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

my_open.sh path/to/README

Я получаю следующий результат:

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

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

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

Создайте сценарий bash test.sh как:

#!/bin/bashgedit myfile.txt

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

chmod +x test.sh

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

./test.sh

Может быть gnome-открыть вместо xdg-открыть

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

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

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

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

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

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

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

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

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

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

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

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

Если это так тогда самый простой способ сделать это - открыть терминал и перейти к scriptname /path/to/filename или, если в path есть какие-либо пробелы, то scriptname '/path/to/filename'

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

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

#!/bin/bashxdg-open "$1"

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

chmod u+x ~/bin/openit1

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

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

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

ЕСЛИ, как заявил ориг & использование оригинала. сценарий для один конкретный файл для каждого скрипта & вызов с помощью d. щелкнув левой кнопкой мыши по скрипту, вам просто нужно выбрать "Бежать" вместо "Запуск в терминале"

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

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

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

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

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

Что вы имеете в виду, говоря “ничего не происходит”? Как вы представляете сценарий bash? Является ли файл исполняемым? Делает myfile.txt существует в том же каталоге, что и скрипт?

Я вызываю скрипт, дважды щелкнув по нему и нажав “Запустить в терминале”. Кажется, ничего не происходит. Файл является исполняемым.

в терминале “cd” в папку, содержащую ваш скрипт, и вызовите ваш скрипт через “./scriptname” - есть ошибки в выводе терминала?

Нет - это отлично работает, и “xdg-open” запускается как задумано, открывая файл с помощью редактора по умолчанию.

можете ли вы pastebin.com ваш полный файл скрипта, чтобы мы могли посмотреть, не является ли что-то еще причиной проблемы?