comando `open` per aprire un file in un'applicazione


13

Perché non riesco ad eseguire questo comando nel mio terminale:

open index.html

Non doveva aprire questo file sul mio browser? Inoltre non è possibile eseguire questo comando: open index.html -a "Sublime Text". Il risultato di questi comandi sono:

$ 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
Suppongo che intendi xdg-openquale dovrebbe aprire il file nel tuo browser. Il opencomando è un collegamento al openvtcomando e apre un file binario in una nuova console virtuale. Apparentemente non è quello che vuoi.
Marco,

1
Supponendo di essere su un sistema OSX? Non credo che ci sia alcun opencomando su Linux.
slm

1
@slm, come sottolinea Marco, c'è un opencomando su Linux, collegato a openvt; i messaggi di errore nella domanda sono coerenti con quella situazione.
Stephen Kitt,

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@EdgarOliveira Se vuoi aprire un programma (un file binario) digita semplicemente il suo nome nel terminale. Se si desidera aprire un file con un programma associato, utilizzare xdg-open <file>e dovrebbe aprire il file con il programma corrispondente.
Marco,

Risposte:


18

Lo scopo principale del opencomando di OS X è aprire un file nell'applicazione associata. L'equivalente di quello sui moderni sistemi non OSX è xdg-open.

xdg-open index.html

xdg-opennon ha un equivalente di OSX open -aper aprire un file in un'applicazione specifica. Questo perché il modo normale di aprire un file in un'applicazione è semplicemente digitare il nome dell'applicazione seguito dal nome del file. Più precisamente, è necessario digitare il nome del programma eseguibile che implementa l'applicazione.

sublime_text index.html

Linux, come altri sistemi Unix (ma non, per quanto ne so, le parti non Unixy di OS X) gestisce il software monitorandolo con un gestore di pacchetti e inserisce i singoli file dove vengono utilizzati . Ad esempio, tutti i programmi eseguibili si trovano in un piccolo set di directory e tutte quelle directory sono elencate nella PATHvariabile ; in esecuzione sublime_textcerca un file chiamato sublime_textnelle directory elencate in PATH. OS X necessita di un ulteriore livello di riferimento indiretto, attraverso open -a, per gestire le applicazioni che sono decompresse in un singolo albero di directory e registrate in un database di applicazioni. Linux non ha alcun database di applicazioni, ma è organizzato in modo tale da non averne bisogno.

Se l'esecuzione della sublime_textshell dei comandi non funziona per te, Sublime Text non è stato installato correttamente. Non l'ho mai usato, e apparentemente si presenta come un archivio tar, non come un pacchetto di distribuzione (ad esempio deb o rpm), quindi è possibile che sia necessario eseguire un ulteriore passaggio di installazione. È davvero compito dei creatori di Sublime Text rendere questo automatico, ma se non lo hanno fatto, probabilmente puoi farlo tu stesso eseguendo il comando

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

Sostituisci con il percorso in cui si trova l' sublime_texteseguibile, ovviamente.

Il opencomando che hai incontrato è un vecchio nome per il openvtcomando (alcune distribuzioni Linux lo includono solo sotto il nome openvt). Il openvtcomando crea una nuova console virtuale , che può essere eseguita solo da root e non viene utilizzata molto spesso in questo secolo poiché la maggior parte delle persone lavora solo in un ambiente grafico.


ma se ho eseguito questo comando "sublime_text indext.html" Ricevo questo risultato "sublime_text: comando non trovato" Come posso risolvere questo problema?
Edgar Oliveira,

@EdgarOliveira Penso di vedere il problema, apparentemente Sublime Text non viene fornito con un pacchetto adeguato? Vedi la mia modifica.
Gilles 'SO- smetti di essere malvagio' il

Ho creato un alias per questo: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' ma quando eseguo "sublimetext" ho aperto due finestre, invece solo una! Perché? Grazie
Edgar Oliveira il

Quando ho cambiato il file .bashrc ho il dubbio "Come resettare il file .bashrc per poter eseguire un nuovo alias, sullo stesso terminale dove ho fatto le modifiche?" Cercalo su Google e trova la risposta, in Unix e Linux, e solo tu esegui il comando "bash" e eseguirai il tuo nuovo alias :)
Edgar Oliveira,

7

Non menzioni il sistema operativo che stai utilizzando.

Su alcune distribuzioni Linux il opencomando è un collegamento simbolico al openvtcomando che apre un binario in una nuova console virtuale. Apparentemente non è quello che vuoi. I tuoi messaggi di errore indicano infatti che hai invocato il openvtcomando. Questo comando prevede un binario di programma (un eseguibile) come argomento.

Presumo che tu intenda xdg-openche, al contrario openvt, non si aspetta un eseguibile come argomento, ma un file che è associato a un programma e apre il file con il programma. Puoi passare file e URL come argomenti.

Pertanto xdg-open index.htmldovrebbe aprire il file nel tuo browser, xdg-open image.pngdovrebbe aprire il file nel tuo visualizzatore di immagini, ecc.


1
L'unico problema è che xdg-open aprirà il file nell'applicazione predefinita per il tipo di file. Non puoi scegliere l'applicazione con xdg-open. Non so se esiste un comando per scegliere l'app, ma se conosci l'app (come nell'esempio "Sublime Text") sarà meglio invocare direttamente il programma.
X3MBoy

1
@ X3MBoy L'idea alla base della xdg-openchiamata è quella di invocare l' applicazione predefinita per quel file. Se si desidera utilizzare un programma diverso, basta chiamare <program> <file>. Non riesco a vedere il problema.
Marco,

Chiede a qualche comando di fare: open index.html -a "Sublime Text" -Ecco perché dico "problema", perché se usi xdg-openper aprire un file html, ci sono migliori possibilità che il file venga aperto dal browser non da un editor di testo come "Sublime Text"
X3MBoy

3

Sebbene le persone spesso xdg-openchiamino come emulazione della funzionalità di open, macOS openè un po 'diverso perché 1. non reindirizza nulla da stdout / stedrr e 2. stacca qualsiasi cosa tu voglia eseguire dal terminale (che è quasi sempre ciò che vuoi quando avvii la GUI app in modo da non avere terminali in giro)

Per risolvere questo, ho trovato un equivalente adeguato usando alcuni strumenti GNU standard (la sintassi è fish shell, ma la conversione in bash è banale):

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

Aggiunto :

Per coloro che usano la shell bash, ecco la funzione:

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

2

La mia soluzione (usata quotidianamente) è usare un aliasfor xdg-open.

Metti questo sul tuo ~/.bashrc:

alias open='xdg-open '

Quindi chiudere e riavviare la shell o source ~/.bashrc.

Ora puoi aprire qualsiasi file con quel comando ... da .png a .jpg a .docx a .pdf a .txt.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.