команда `open`, щоб відкрити файл у програмі


13

Чому я не можу запустити цю команду в своєму терміналі:

open index.html

Чи не слід було відкривати цей файл у моєму браузері? Крім того, я не можу запустити цю команду: open index.html -a "Sublime Text". Результатом цих команд є:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
Я припускаю, що ви маєте на увазі, xdg-openякий має відкрити файл у вашому браузері. openКоманда є посиланням на openvtкоманду та відкриває двійковий файл в новій віртуальній консолі. Це, мабуть, не те, що ти хочеш.
Марко

1
Якщо припустити, що ви працюєте в системі OSX? Я не вірю, що в openLinux немає жодної команди.
slm

1
@slm, як вказує Марко, openна Linux є команда, пов'язана з openvt; повідомлення про помилки у питанні відповідають тій ситуації.
Стівен Кітт

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@EdgarOliveira Якщо ви хочете відкрити програму (двійковий), просто введіть її ім'я в термінал. Якщо ви хочете відкрити файл із пов’язаною програмою, використовуйте xdg-open <file>і він повинен відкрити файл із відповідною програмою.
Марко

Відповіді:


19

Основна мета команди OS X open- відкрити файл у відповідному додатку. Еквівалент цього у сучасних un-OSX є xdg-open.

xdg-open index.html

xdg-openне має еквівалента OSX open -aдля відкриття файлу в конкретній програмі. Це тому, що звичайний спосіб відкрити файл у програмі - це просто ввести ім’я програми, а потім ім'я файлу. Точніше, вам потрібно ввести ім'я виконуваної програми, яка реалізує додаток.

sublime_text index.html

Linux, як і інші системи Unix (але, наскільки я не знаю, не-Unixy частини OS X) управляє програмним забезпеченням, відстежуючи його за допомогою менеджера пакетів, і розміщує окремі файли там, де вони використовуються . Наприклад, всі виконувані програми знаходяться у невеликому наборі каталогів, і всі ці каталоги перелічені у PATHзмінній ; біг sublime_textшукає файл, викликаний sublime_textу каталогах, перелічених у PATH. OS X потребує додаткового рівня непрямості open -aдля обробки програм, які розпаковані в одному дереві каталогів та зареєстровані в базі даних додатків. У Linux немає жодної бази додатків, але вона організована таким чином, що не потрібна.

Якщо запуск командної sublime_textоболонки не працює для вас, текст Sublime не встановлений належним чином. Я ніколи його не використовував, і, мабуть, він надходить як tar-архів, а не як пакет розповсюдження (наприклад, deb або rpm), тому можливо, що вам потрібно зробити додатковий крок установки. Це справді робота виробників Sublime Text зробити це автоматично, але якщо вони цього не зробили, ви, ймовірно, можете зробити це самостійно, виконавши команду

sudo -s …/sublime_text /usr/local/bin

Замініть на шлях, де знаходиться sublime_textвиконуваний файл, звичайно.

openКоманда , яку ви зіткнулися це стара назва для openvtкоманди (деякі дистрибутиви Linux включають тільки під ім'ям openvt). openvtКоманда створює нову віртуальну консоль , яка може бути зроблена тільки корінь і дуже часто не використовується в цьому столітті , оскільки більшість людей тільки коли - або працювати в графічному середовищі вікна.


але якщо я запустив цю команду "sublime_text indext.html" я отримую цей результат "sublime_text: команда не знайдена" Як я можу спричинити цю проблему?
Едгар Олівейра

@EdgarOliveira Я думаю, що я бачу проблему, мабуть, Sublime Text не поставляється з належним пакетом? Дивіться мою редакцію.
Жил "ТАК - перестань бути злим"

Я створив псевдонім для цього: псевдонім sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper ", але коли я виконую" sublimetext ", відкрив два вікна, замість цього лише одне! Чому? Спасибі
Едгар Олівейра

Коли я змінив файл .bashrc, у мене виникають сумніви "Як скинути файл .bashrc для того, щоб виконати новий псевдонім на тому самому терміналі, де я зробив зміни?" Google це і знайшов відповідь у Unix & Linux, і тільки ви виконаєте команду "bash", і ви запустите ваш новий псевдонім :)
Едгар Олівейра,

7

Ви не згадуєте операційну систему, яку ви використовуєте.

У деяких дистрибутивах Linux openкоманда є символічним посиланням на openvtкоманду, яка відкриває двійковий файл у новій віртуальній консолі. Це, мабуть, не те, що ти хочеш. Ваші повідомлення про помилки дійсно вказують на те, що ви викликали openvtкоманду. Ця команда очікує, що програмний двійковий файл (виконуваний файл) є аргументом.

Я припускаю, що ви маєте на увазі, xdg-openякий, на відміну від openvt, не очікує виконується як аргумент, а файл, який асоціюється з програмою і відкриває файл із програмою. Ви можете передавати файли та URL-адреси як аргументи.

Тому xdg-open index.htmlслід відкрити файл у вашому браузері, xdg-open image.pngслід відкрити файл у вашому переглядачі зображень тощо.


1
Єдина проблема полягає в тому, що xdg-open відкриє файл у застосуванні за замовчуванням для файлового типу. Ви не можете вибрати програму з xdg-open. Я не знаю, чи є команда вибрати додаток, але якщо ви знаєте додаток (як, наприклад, у прикладі "Піднесений текст"), то краще буде звернутися до програми безпосередньо.
X3MBoy

1
@ X3MBoy Ідея xdg-openвиклику - викликати програму за замовчуванням для цього файлу. Якщо ви хочете скористатися іншою програмою, просто зателефонуйте <program> <file>. Я не бачу проблеми.
Марко

Він просить виконати якусь команду: open index.html -a "Sublime Text" -Ось чому я кажу "проблема", тому що якщо ви xdg-openвідкриєте файл html, є більш шанси, що файл відкриється браузером, а не текстовим редактором типу "Піднесений текст"
X3MBoy

3

Хоча люди часто називають xdg-openемуляцію функціоналу open, macOS openтрохи відрізняється, оскільки він 1. нічого не перенаправляє з stdout / stedrr і 2. вилучає все, що ви хочете запустити з терміналу (що майже завжди те, що ви хочете при запуску GUI програми, щоб у вас не було прокладок терміналів)

Щоб вирішити це, я придумав належний еквівалент, використовуючи деякі стандартні інструменти GNU (синтаксис є рибною оболонкою, але перетворення на bash є тривіальним):

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

Додано :

Для тих, хто використовує оболонку bash, ось ця функція:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

Моє рішення (щодня використовується) - використовувати aliasдля xdg-open.

Просто покладіть це на ~/.bashrc:

alias open='xdg-open '

Потім закрийте і перезавантажте оболонку або source ~/.bashrc.

Тепер ви можете відкрити будь-який файл з цією командою ... від .png до .jpg до .docx до .pdf до .txt.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.