Comando `abrir` para abrir un archivo en una aplicación

13

¿Por qué no puedo ejecutar este comando en mi terminal?

open index.html

¿No se suponía que abría este archivo en mi navegador? También no puedo ejecutar este comando: open index.html -a "Sublime Text". El resultado de estos comandos son:

$ 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
fuente
2
Supongo que te refieres a xdg-opencuál debería abrir el archivo en tu navegador. El opencomando es un enlace al openvtcomando y abre un binario en una nueva consola virtual. Al parecer, eso no es lo que quieres.
Marco
1
¿Asumiendo que estás en un sistema OSX? No creo que haya ningún opencomando en Linux.
slm
1
@slm, como señala Marco, hay un opencomando en Linux, vinculado a openvt; Los mensajes de error en la pregunta son consistentes con esa situación.
Stephen Kitt el
xdg-open filename_or_URL
Ijaz Ahmad Khan
1
@EdgarOliveira Si desea abrir un programa (un binario) simplemente escriba su nombre en el terminal. Si desea abrir un archivo con un programa asociado, use xdg-open <file>y debería abrir el archivo con el programa correspondiente.
Marco

Respuestas:

18

El propósito principal del opencomando de OS X es abrir un archivo en la aplicación asociada. El equivalente de eso en los equipos modernos que no son OSX es xdg-open.

xdg-open index.html

xdg-openno tiene un equivalente de OSX open -apara abrir un archivo en una aplicación específica. Esto se debe a que la forma normal de abrir un archivo en una aplicación es simplemente escribir el nombre de la aplicación seguido del nombre del archivo. Más precisamente, debe escribir el nombre del programa ejecutable que implementa la aplicación.

sublime_text index.html

Linux, como otros sistemas Unix (pero no, hasta donde yo sé, las partes que no son Unixy de OS X) administra el software al rastrearlo con un administrador de paquetes y coloca los archivos individuales donde se usan . Por ejemplo, todos los programas ejecutables están en un pequeño conjunto de directorios y todos esos directorios están listados en la PATHvariable ; ejecutando sublime_textbusca un archivo llamado sublime_texten los directorios listados en PATH. OS X necesita un nivel adicional de indirección, a través open -a, para manejar aplicaciones que se desempaquetan en un solo árbol de directorios y se registran en una base de datos de aplicaciones. Linux no tiene ninguna base de datos de aplicaciones, pero está organizada de tal manera que no necesita una.

Si ejecutar el comando sublime_textshell no funciona para usted, entonces Sublime Text no se ha instalado correctamente. Nunca lo he usado, y aparentemente viene como un archivo tar, no como un paquete de distribución (por ejemplo, deb o rpm), por lo que es posible que necesites hacer un paso adicional de instalación. Realmente es el trabajo de los creadores de Sublime Text hacer que esto sea automático, pero si no lo han hecho, probablemente pueda hacerlo usted mismo ejecutando el comando

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

Reemplazar por la ruta donde está el sublime_textejecutable, por supuesto.

El opencomando que encontró es un nombre anterior para el openvtcomando (algunas distribuciones de Linux solo lo incluyen bajo el nombre openvt). El openvtcomando crea una nueva consola virtual , que solo puede ser realizada por root y no se usa con mucha frecuencia en este siglo, ya que la mayoría de las personas solo trabajan en un entorno de ventana gráfica.

Gilles 'SO- deja de ser malvado'
fuente
pero si ejecuté este comando "sublime_text indext.html" Recibo este resultado "sublime_text: comando no encontrado" ¿Cómo puedo generar ese problema?
Edgar Oliveira
@EdgarOliveira Creo que veo el problema, ¿aparentemente Sublime Text no viene con un paquete adecuado? Mira mi edición.
Gilles 'SO- deja de ser malvado'
Creé un alias para eso: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' pero cuando ejecuto "sublimetext" ¡abrí dos ventanas, en cambio solo una! ¿Por qué? Gracias
Edgar Oliveira
Cuando cambié el archivo .bashrc tengo la duda "¿Cómo restablecer el archivo .bashrc para poder ejecutar un nuevo alias, en el mismo terminal donde hice los cambios?" Google y encontró la respuesta, en Unix y Linux, y solo usted tiene el comando de ejecución "bash" y ejecutará el nuevo alias :)
Edgar Oliveira
7

No mencionas el sistema operativo que estás utilizando.

En algunas distribuciones de Linux, el opencomando es un enlace simbólico al openvtcomando que abre un binario en una nueva consola virtual. Al parecer, eso no es lo que quieres. Sus mensajes de error indican que invocó el openvtcomando. Este comando espera un programa binario (un ejecutable) como argumento.

Supongo que quiere decir xdg-openque, en contraste con openvt, no espera un ejecutable como argumento, sino un archivo que está asociado con un programa y abre el archivo con el programa. Puede pasar archivos y URL como argumentos.

Por xdg-open index.htmllo tanto, debe abrir el archivo en su navegador, xdg-open image.pngdebe abrir el archivo en su visor de imágenes, etc.

Marco
fuente
1
El único problema es que xdg-open abrirá el archivo en la aplicación predeterminada para el tipo de archivo. No puede elegir la aplicación con xdg-open. No sé si hay un comando para elegir la aplicación, pero si conoce la aplicación (como en el ejemplo "Sublime Text") será mejor invocar el programa directamente.
X3MBoy
1
@ X3MBoy La idea detrás de la xdg-openllamada es invocar la aplicación predeterminada para ese archivo. Si desea utilizar un programa diferente, solo llame <program> <file>. No veo el problema.
Marco
Pide algún comando que hacer: open index.html -a "Sublime Text" -por eso digo "problema", porque si usas xdg-openpara abrir un archivo html, hay muchas posibilidades de que el navegador abra el archivo y no un editor de texto como "Sublime Text"
X3MBoy
3

Aunque las personas a menudo xdg-openlo llaman como emulando la funcionalidad de open, macOS openes un poco diferente porque 1. no redirige nada desde stdout / stedrr y 2. desconecta lo que desea ejecutar desde el terminal (que es casi siempre lo que desea al iniciar la GUI aplicaciones para que no tenga terminales por ahí)

Para resolver esto, he encontrado un equivalente apropiado usando algunas herramientas GNU estándar (la sintaxis es fish shell, pero la conversión a bash es trivial):

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

Añadido :

Para aquellos que usan el shell bash, aquí está la función:

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

Mi solución (utilizada a diario) es usar un aliasfor xdg-open.

Solo pon esto en tu ~/.bashrc:

alias open='xdg-open '

Luego cierre y reinicie su shell o source ~/.bashrc.

Ahora puede abrir cualquier archivo con ese comando ... desde .png a .jpg a .docx a .pdf a .txt.

slm
fuente