Як відкрити файл із сценарію 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

що підказує мені, що шлях до файлу в порядку, розпізнається миметик, а також робочий стіл, який використовується для відкриття файлу, також добре. І gedit відкриється з відповідним файлом.

Тепер при запуску іншого файлу:

my_open.sh path/to/README

Я отримую такий вихід:

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

Зверніть увагу на різний міметик та відсутній файл на робочому столі. Тим не менш, xdg-open відкриває за замовчуванням всі текстові файли (gedit).

Отже, ви можете додати щось подібне до свого сценарію і побачити, чи отримаєте ви несподіваний результат (який ви можете потім додати до свого питання ...).


штрафу, за винятком галасливих finished scriptзрештою. Я рекомендую [ catb.org/~esr/writings/taoup/html/škar( мистецтво програмування Unix), правило мовчання. Btw. Задні заставки застарілі - віддайте перевагу замість $ (...), що є нестабільним.
користувач невідомий

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

Ось для чого призначено підказку.
користувач невідомий

3
правда. просто думав, що це буде очевидніше саме так. насправді весь сценарій не потрібен, тому що це не більше, ніж xdg-openвже є, тому це все одно не сценарій якості виробництва ...
xubuntix

5

Створіть bash script test.sh як:

#!/bin/bash
gedit myfile.txt

Потім зробіть сценарій виконуваним як:

chmod +x test.sh

Нарешті, запустіть сценарій так:

./test.sh

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

3

Може бути, gnome-open замість xdg-open


Я вважав, що це рішення спрацювало найкраще
Іван

Що робити, якщо користувач не працює в Gnome?
Годдард

2

Ви йдете в правильному напрямку. Якщо ви хочете, щоб додаток gui залишався відкритим, коли ви закриваєте вікно терміналу, тоді вам просто потрібно додати a nohupна початку рядка.

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

Якщо додаток gui не відкриває його, ймовірно, тому, що у вас немає встановленої DISPLAYзмінної середовища в оболонці, з якої ви намагаєтеся запустити її. Спробуйте зробити відлуння$DISPLAY


3
xdg-open не вимагає nohupні&
xubuntix

0

Перша частина вашого запитання

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

для його використання ви можете просто ввести cat FILENAME.

Інша інформація

Якщо вам потрібно більше команд: Ось хороший список команд.

Редактор за замовчуванням GNOME

Якщо ви хочете відкрити файл у програмі GNOME за замовчуванням gedit.

щоб використовувати його, просто введіть gedit FILENAME


Це відкриває файл в терміналі, але не редактор за замовчуванням GNOME
Industrial

@industrial відредагував мою відповідь.
Альвар

На жаль, або відкрита робота не буде ...
Промислове

@Industrial Що ви просите? поясніть своє запитання далі! ви говорите кілька різних речей, і я відповів на одну з них, але ви говорите, що не хочете цим користуватися ...
Альвар

@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' 

ЯКЩО як зазначено orig та використання orig. сценарій для одного конкретного файлу на сценарій та виклик d. клацнувши лівою кнопкою миші на сценарії, вам просто потрібно вибрати " Запустити " замість "Запустити в терміналі"


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