Хорошо, итак, бегу gedit myfile.txt работает хорошо. Но как насчет открытия файла из скрипта bash, используя настольное приложение по умолчанию, связанное с типом файла?
Я попробовал ниже, который отлично работает при запуске вручную в терминале, но когда я помещаю его в файл bash, ничего не происходит:
#!/bin/bashxdg-open "myfile.txt"&
Что я должен сделать вместо этого?
Пожалуйста, обратите внимание, что мне нужно, чтобы файл оставался открытым и после закрытия терминала.
при запуске этого скрипта (с именем 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).
Итак, возможно, вы захотите добавить что-то подобное в свой скрипт и посмотреть, получите ли вы неожиданный результат (который затем вы можете добавить к своему вопросу ...).
Вы идете в правильном направлении. Если вы хотите, чтобы приложение с графическим интерфейсом оставалось открытым при закрытии окна терминала, вам просто нужно добавить nohup в начале очереди.
#!/bin/bashnohup xdg-open "myfile.txt"&
Если приложение с графическим интерфейсом не открывается, вероятно, это связано с тем, что у вас нет DISPLAY переменная окружения, установленная в оболочке, из которой вы пытаетесь ее запустить. Попробуйте сделать эхо $DISPLAY
Хотя я не уверен, что на самом деле здесь нужно сделать, основываясь на некоторых недавних комментариях, которые один скрипт должен открывать ЛЮБОЙ файл в приложении по умолчанию или в той мере, в какой приложение поддерживает это.
Если это так тогда самый простой способ сделать это - открыть терминал и перейти к 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 существует в том же каталоге, что и скрипт?