Equivalente Linux del comando "open" di Mac OS X [chiuso]


214

Ho trovato molto utile il comando "apri" in Mac OS X nella riga di comando. Da "man open":

Il opencomando apre un file (o una directory o URL), proprio come se si fosse fatto doppio clic sull'icona del file. Se non viene specificato alcun nome applicazione, l'applicazione predefinita determinata tramite LaunchServices viene utilizzata per aprire i file specificati.

Cioè, se voglio aprire un file PDF con il visualizzatore PDF predefinito (sembra essere Anteprima), devo solo fare:

open my.pdf

In Linux, tuttavia, per aprire un file PDF dalla riga di comando, ho dovuto scavare per trovare il visualizzatore PDF predefinito è, ad esempio, "evince" (chi avrebbe indovinato ??), e quindi

evince my.pdf

Quindi, esiste un semplice equivalente del comando 'open' nella riga di comando di Linux?

Grazie!


6
Forse questa domanda dovrebbe essere spostata su superuser.com?
Quazgar,

1
Super User sembra inappropriato - esiste uno StackOverflow per "utenti ordinari" o forse "programmatori che vogliono creare script per altre applicazioni", ovvero automatizzare?
Krazy Glew,

askubuntu potrebbe adattarsi.
Gopherkhan,

Risposte:


238

Potresti provare xdg-open, la maggior parte delle distribuzioni Linux ce l'hanno. Si aprirà l'app associata predefinita per il tuo file.

Cordiali saluti https://portland.freedesktop.org/doc/xdg-open.html


13
Una grande differenza tra questo e open, tuttavia, è che questo non apre il file / l'app in background. Le app Linux sembrano essere molto loquaci e spesso generano più linee di diagnostica e avvisi direttamente nel tuo terminale (anche se nulla è andato storto). Di solito invece devo fare qualcosa del genere xdg-open <file> &> /dev/null &. C'è qualcosa di meglio di xdg-open in questo senso?
Suan,

13
@Suan: apre l'app in "background", staccata dal terminale, in modo da poter continuare a lavorare nel terminale non appena viene lanciata l'app. Quindi il trailing &non è necessario. Per quanto riguarda le "linee multiple di diagnostica", quelle provengono dall'app stessa, non da xdg-open. Se non si desidera alcun output, è necessario &> /dev/nullutilizzare anche evincedirettamente (esempio di OP), quindi il reclamo è nullo. xdg-openè davvero la strada da percorrere.
MestreLion,

15
@MestreLion Non credo che il reclamo sia completamente nullo, poiché l'apertura di Mac non comporta l'eco dell'output dell'applicazione sul terminale.
Max Nanasy,

7
@MaxNanasy: uscita dalle applicazioni, non è xdg-open's guasto se essi sono loquace. E sopprimere tali messaggi dovrebbe essere una scelta dell'utente , non di xdg. Quindi è un vuoto lamentarsi per chiedere qualcosa di "migliore" di xdg-open. Inoltre, se Mac openha alcuna possibilità di uscita quei messaggi, direi che openè molto peggio di quanto xdg-open, dal momento che quando si utilizza riga di comando per lanciare file che si sta di solito interessato a quella di uscita (in caso contrario, perché non è sufficiente fare doppio clic sul file in un browser come Nautilus?)
MestreLion,

12
@MestreLion Anche se si potrebbe affermare che il reclamo è banale, dal momento che alias open='xdg-open &>/dev/null'produce approssimativamente il comportamento desiderato (anche se gli errori di xdg-open stesso (al contrario del solo programma lanciato) sarebbero anche messi a tacere, il che è indesiderabile).
Max Nanasy,

76

L'equivalente che stai cercando è xdg-open, che può essere utilizzato allo stesso modo del opencomando di OS X. Per esempio:

xdg-open ~/Documents/Chubby_Bubbies.odt

Tuttavia, questo è davvero difficile da digitare in modo rapido e preciso. Invece, dovresti creare un alias per xdg-open, il che rende il processo molto più veloce.

Certo, puoi alias openper farlo corrispondere a OS X (puoi scegliere tutto quello che vuoi), ma personalmente, io uso la parentesi quadra giusta ( ]) per il mio collegamento per motivi di velocità. Per usarlo, aggiungi quanto segue al tuo .bashrcfile:

alias ']'='xdg-open'

Quindi, per aprire qualsiasi risorsa, usala come uno di questi esempi:

] www.google.com
] file.txt
] ~/Pictures
] ssh://myserver.local/home/jeremy

Inoltre, ciò consente di aprire un browser di file (ad es. Nautilus) nella directory corrente:

] .

Per esperienza ho scoperto che gli alias di una lettera funzionano meglio per il collegamento sopra riportato. Dopotutto, l'obiettivo è l'efficienza. E puoi tornare indietro e fare lo stesso alias su OS X - lo lascio come esercizio al lettore. :-)


26
Ho creato un alias da 'open' a 'xdg-open' per renderlo coerente sia su Linux che su Mac.
Adam Byrtek,

Va bene, ma non eccezionale, ho provato ad aprire un file .url e l'ho aperto in gedit.
sorin,

18
@sorin Stai cercando di far sembrare che sia colpa mia ?!
Jeremy Visser,

7
@sorin: xdg-openapre l'applicazione predefinita del sistema per il file. Nel tuo caso, i .urlfile sono impostati per aprirsi in gedit. Se desideri modificarlo, fai clic con il pulsante destro del mouse sul file in Nautilus e vai su Proprietà> Apri con per modificare l'applicazione predefinita e xdg-openfunzionerà di conseguenza.
MestreLion,

Ecco un Gist che ho creato, basta copiare e incollare ed eseguire il comando nella sezione "Complessivamente" nel primo commento.
ozanmuyes,

14

L'ho appena risolto da solo, così ho pensato di scrivere come l'ho fatto, il che è particolarmente rilevante per quello che Suan ha chiesto. Questi passaggi ti consentono di digitare "apri" e non il tuo terminale coperto da messaggi che non ti servono:

Creare uno script chiamato openin ~/bin, il contenuto è solo:

xdg-open "$1" &> /dev/null &

Salvare e chiudere lo script, quindi digitare "source .profile" (o .bash_profile se pertinente). Ecco perché digitando "apri musica" si aprirà la cartella della musica nella GUI di nautilus e non si dovrebbe inserire nulla sul terminale.


Cos'è l'alias e la strana posizione? Basta chiamare lo script stesso opene inserirlo nel PERCORSO (in genere in $HOME/bin/open)
tripleee

Sulla mia macchina (ubuntu 11.10) se aggiungi uno script chiamato 'open' al tuo percorso e provi a farlo in questo modo viene sovrascritto da / bin / open. Quindi non riesco a trovare un modo per farti lavorare senza un alias.
Anake,

Il trucco è quello di avere il proprio script in una directory che viene in precedenza nel vostro PATHrispetto /bin. Per convenzione, se lo hai $HOME/bin, verrebbe aggiunto all'inizio del PERCORSO, prima di qualsiasi directory di sistema. Comunemente, questo viene fatto dal tuo .profileo simili. Ad esempio, l'impostazione predefinita .profilesu Ubuntu fa esattamente questo.
tripleee,

2
Il reindirizzamento dell'output su /dev/nullè un po 'capriccioso; forse potresti reindirizzare l'output $HOME/.xsession-errorso parte di questo, in modo che la diagnostica non vada completamente persa nel caso in cui sia necessario risolvere qualcosa.
tripleee,

1
@efdee: citare correttamente tutte le variabili è una buona pratica di programmazione e vitale negli script bash. Questo non ha nulla a che fare con xdg-openquesto, questo è un problema di shell.
MestreLion,

11

Tradizionalmente, è possibile utilizzare il comando "vedi". Che utilizza solo run-mailcap. Funzionerà senza Gnome, X ecc.

man see

3
Il problema è che run-mailcap(e i suoi numerosi alias) utilizza un database di associazione app separato (e terribilmente obsoleto). Ad esempio nel mio sistema, mentre le .mp3canzoni si aprono correttamente in VLC, i .txtfile si aprono in meno (anziché gedit) e i .pdffile non riescono ad aprirsi! (Errore: nessuna regola di "visualizzazione" del codice di posta trovata per il tipo "application / pdf")
MestreLion

Come ho detto, dipende da ciascun sistema. Poche applicazioni si registrano in un modo che le run-mailcapriconosce. xdg-openusa internamente gvfs-open(su sistemi Gnome come Ubuntu), che a sua volta usa le specifiche md-database di xdg, che usano molte più applicazioni.
MestreLion,

gimpHo aperto un PDF di oltre 50 pagine per me. Continuerò con xdg-open.
user1717828

Apertura di file txt in lessx''D
Timo

4

gnome-open


7
gnome-open è ora deprecato e inoltre era già utilizzato internamente xdg-opense l'utente era su Gnome (ora lo utilizza gvfs-open)
MestreLion

2

Se hai configurato correttamente i tuoi mimi, puoi usarli mimeopen. Dai un'occhiata alla sua pagina man, dato che ha alcune opzioni utili.


1
Sarebbe bello se questa risposta fosse ampliata. Sarei interessato a vedere come funziona
Magnus

-3

Nell'ambiente Gnome Desktop, utilizzo il seguente comando:

nautilus `pwd` &

Questo è simile a "aperto". comando in Mac


11
Questa risposta ha diversi problemi: A) Apre la directory corrente, non il file, come richiesto dall'utente. B) si può usare .al posto di " pwd" C) se si modifica pwddi un file, l'utente sarebbe ancora bisogno di colpire INVIO dopo Nautilus apre D) nautilus Apertura prima solo per essa per aprire il file è una soluzione molto indiretto.
MestreLion,
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.