Befehl `open` zum Öffnen einer Datei in einer Anwendung

11

Warum kann ich diesen Befehl nicht in meinem Terminal ausführen:

open index.html

Sollte es diese Datei nicht in meinem Browser öffnen? Ich kann diesen Befehl auch nicht ausführen : open index.html -a "Sublime Text". Das Ergebnis dieser Befehle ist:

$ 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
Edgar Oliveira
quelle
2
Ich nehme an, Sie meinen, xdg-openwelche die Datei in Ihrem Browser öffnen soll. Der openBefehl ist eine Verknüpfung zum openvtBefehl und öffnet eine Binärdatei in einer neuen virtuellen Konsole. Das ist anscheinend nicht was du willst.
Marco
1
Angenommen, Sie befinden sich auf einem OSX-System? Ich glaube nicht, dass es openunter Linux einen Befehl gibt .
slm
1
@slm, wie Marco betont, gibt es openunter Linux einen Befehl, der mit verknüpft ist openvt; Die Fehlermeldungen in der Frage stimmen mit dieser Situation überein.
Stephen Kitt
xdg-open Dateiname_oder_URL
Ijaz Ahmad Khan
1
@EdgarOliveira Wenn Sie ein Programm (eine Binärdatei) öffnen möchten, geben Sie einfach seinen Namen in das Terminal ein. Wenn Sie eine Datei mit einem zugeordneten Programm öffnen möchten, verwenden Sie xdg-open <file>und es sollte die Datei mit dem entsprechenden Programm öffnen.
Marco

Antworten:

16

Der Hauptzweck des openBefehls von OS X besteht darin, eine Datei in der zugehörigen Anwendung zu öffnen. Das Äquivalent zu modernen Nicht-OSX-Unices ist xdg-open.

xdg-open index.html

xdg-openhat kein Äquivalent zu OSX open -a, um eine Datei in einer bestimmten Anwendung zu öffnen. Dies liegt daran, dass die normale Methode zum Öffnen einer Datei in einer Anwendung darin besteht, einfach den Namen der Anwendung gefolgt vom Namen der Datei einzugeben. Genauer gesagt müssen Sie den Namen des ausführbaren Programms eingeben, das die Anwendung implementiert.

sublime_text index.html

Linux verwaltet wie andere Unix-Systeme (aber meines Wissens nicht die Nicht-Unixy-Teile von OS X) Software, indem es sie mit einem Paketmanager verfolgt und einzelne Dateien dort ablegt , wo sie verwendet werden . Beispielsweise befinden sich alle ausführbaren Programme in einer kleinen Gruppe von Verzeichnissen, und alle diese Verzeichnisse sind in der PATHVariablen aufgeführt . running sublime_textsucht nach einer Datei, die sublime_textin den in aufgeführten Verzeichnissen aufgerufen wird PATH. OS X benötigt eine zusätzliche Indirektionsebene, open -aum Anwendungen zu verarbeiten, die in einem einzelnen Verzeichnisbaum entpackt und in einer Anwendungsdatenbank registriert sind. Linux hat keine Anwendungsdatenbank, ist aber so organisiert, dass es keine benötigt.

Wenn das Ausführen der Befehlsshell sublime_textfür Sie nicht funktioniert, wurde Sublime Text nicht ordnungsgemäß installiert. Ich habe es nie verwendet, und anscheinend wird es als Tar-Archiv und nicht als Distributionspaket (z. B. deb oder rpm) geliefert. Daher ist es möglich, dass Sie einen zusätzlichen Installationsschritt ausführen müssen. Es ist wirklich die Aufgabe der Macher von Sublime Text, dies automatisch zu machen, aber wenn sie es nicht getan haben, können Sie es wahrscheinlich selbst tun, indem Sie den Befehl ausführen

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

Ersetzen Sie natürlich durch den Pfad, in dem sich die sublime_textausführbare Datei befindet.

Der openBefehl, auf den Sie gestoßen sind, ist ein älterer Name für den openvtBefehl (einige Linux-Distributionen enthalten ihn nur unter dem Namen openvt). Der openvtBefehl erstellt eine neue virtuelle Konsole , die nur von root ausgeführt werden kann und in diesem Jahrhundert nicht sehr häufig verwendet wird, da die meisten Benutzer immer nur in einer grafischen Fensterumgebung arbeiten.

Gilles 'SO - hör auf böse zu sein'
quelle
aber wenn ich diesen Befehl "sublime_text indext.html" ausgeführt habe, erhalte ich dieses Ergebnis "sublime_text: Befehl nicht gefunden" Wie kann ich dieses Problem verursachen?
Edgar Oliveira
@EdgarOliveira Ich glaube, ich sehe das Problem, anscheinend kommt Sublime Text nicht mit einem richtigen Paket? Siehe meine Bearbeitung.
Gilles 'SO - hör auf böse zu sein'
Ich habe dafür einen Alias ​​erstellt: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper', aber wenn ich "sublimetext" ausführe, wurden zwei Fenster geöffnet, stattdessen nur eines! Warum? Vielen Dank
Edgar Oliveira
Wenn ich die Datei .bashrc geändert habe, habe ich den Zweifel "Wie kann die Datei .bashrc zurückgesetzt werden, um einen neuen Alias ​​auf demselben Terminal auszuführen, auf dem ich die Änderungen vorgenommen habe?" Google es und fand die Antwort in Unix & Linux, und nur Sie haben den Befehl "bash" ausgeführt und Sie werden Ihren neuen Alias ​​ausführen :)
Edgar Oliveira
7

Sie erwähnen nicht das Betriebssystem, das Sie verwenden.

Bei einigen Linux-Distributionen ist der openBefehl eine symbolische Verknüpfung zu dem openvtBefehl, der eine Binärdatei in einer neuen virtuellen Konsole öffnet. Das ist anscheinend nicht was du willst. Ihre Fehlermeldungen zeigen tatsächlich an, dass Sie den openvtBefehl aufgerufen haben . Dieser Befehl erwartet eine Programmbinärdatei (eine ausführbare Datei) als Argument.

Ich nehme an, Sie meinen, xdg-openwas im Gegensatz dazu openvtkeine ausführbare Datei als Argument erwartet, sondern eine Datei, die einem Programm zugeordnet ist und die Datei mit dem Programm öffnet. Sie können Dateien und URLs als Argumente übergeben.

Daher xdg-open index.htmlsollte die Datei in Ihrem Browser xdg-open image.pnggeöffnet werden , sollte die Datei in Ihrem Bildbetrachter geöffnet werden usw.

Marco
quelle
1
Das einzige Problem ist, dass xdg-open die Datei in der Standardanwendung für den Dateityp öffnet. Sie können die Anwendung mit xdg-open nicht auswählen. Ich weiß nicht, ob es einen Befehl zum Auswählen der App gibt, aber wenn Sie die App kennen (wie im Beispiel "Sublime Text"), ist es besser, das Programm direkt aufzurufen.
X3MBoy
1
@ X3MBoy Die Idee hinter dem xdg-openAufruf ist, die Standardanwendung für diese Datei aufzurufen . Wenn Sie ein anderes Programm verwenden möchten, rufen Sie einfach an <program> <file>. Ich sehe das Problem nicht.
Marco
Er bittet um einen Befehl: open index.html -a "Sublime Text" -Deshalb sage ich "Problem", denn wenn Sie xdg-openeine HTML-Datei öffnen, besteht eine bessere Wahrscheinlichkeit, dass die Datei vom Browser und nicht von einem Texteditor wie "Sublime Text"
X3MBoy geöffnet wird
3

Obwohl die Leute oft xdg-openals Emulation der Funktionalität von bezeichnen open, ist macOS openetwas anders, weil es 1. nichts von stdout / stedrr umleitet und 2. alles, was Sie ausführen möchten, vom Terminal löst (was fast immer das ist, was Sie beim Starten der GUI wollen Apps, damit keine Terminals herumliegen)

Um dies zu lösen, habe ich mit einigen Standard-GNU-Tools ein geeignetes Äquivalent gefunden (die Syntax ist Fischschale, aber die Konvertierung in Bash ist trivial):

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

Hinzugefügt :

Für diejenigen, die die Bash-Shell verwenden, ist hier die Funktion:

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

Meine Lösung (täglich verwendet) ist die Verwendung eines aliasfür xdg-open.

Setzen Sie dies einfach auf Ihre ~/.bashrc:

alias open='xdg-open '

Schließen Sie dann Ihre Shell oder starten Sie sie neu source ~/.bashrc.

Jetzt können Sie jede Datei mit diesem Befehl öffnen ... von .png über .jpg bis .docx bis .pdf bis .txt.

slm
quelle