Как открыть файл из скрипта 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
Вы идете в правильном направлении. Если вы хотите, чтобы приложение 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