Estoy empezando a experimentar con Crunchbang (que se basa en Debian y usa Terminator ) como un entorno de desarrollo web, y una de las cosas con las que estoy luchando es el comportamiento xdg-open
. Vengo de un entorno OSX, así que perdóname si esta pregunta resulta ser densa.
Me gustaría poder abrir una url xdg-open http://www.google.com
y luego seguir usando la misma ventana de terminal para trabajar (así es como open
funciona en OSX). En este momento, el uso xdg-open
ocupa la pestaña / sesión actual hasta que cierre la ventana del navegador, o finalice manualmente las cosas con ctrl + c
. Prefiero que comience un nuevo proceso, de esa manera puedo abrir una URL, consultar los datos en la página y usarla en la misma pestaña / ventana sin necesidad de abrir una adicional.
fuente
Respuestas:
Extraño, funciona así de fábrica en mi Debian. Intenta ejecutarlo en segundo plano:
Puede convertir esto en una función agregando estas líneas a su
~/.bashrc
archivo:Luego puede simplemente ejecutar
open http://www.google.com
y se ejecutará en segundo plano.fuente
open
, (ie open = 'xdg-open') ¿hay alguna manera de obtener la funcionalidadxdg-open <url> &
sin usar una función de shell?Si desea separar el proceso del shell actual en lugar de comenzarlo como un trabajo en segundo plano
xdg-open http://www.google.com &
, me gusta ladetach
utilidad:Se podría crear un alias para esto. Me gusta
detach
másnohup
como se cierra stdin stdout y stderr de forma predeterminada para su invocación es más limpio.fuente
detach
no parece existir en mi distribución.nohup
inicia el proceso, pero aún ocupa la ventana de terminal.detach
tampoco está en mi distribución; pero pitón puede manejar la apertura de URLs y separar:python -m webbrowser -t "http://example.com"
. Esto debería funcionar de forma inmediata en casi todas las distribuciones de Linux algo recientes.detach
ni siquiera está en el AUR, resultó fácil de instalar desde la fuente y, además, fue el único programa que logró lo que quería. (las alternativas enumeradas aquí y en eldetach
sitio web no permiten cerrar el shell mientras sexdg-open
está ejecutando, o al menosdetach
no hicieron que mi shell se quejara un poco)xdg-open
espera a que termine el programa. Esto es por diseño. Si el programa es un modo de texto, debe permanecer en primer plano en el terminal. Incluso si el programa es una GUI, este comportamiento es útil en caso de quexdg-open
se use desde un script y el script quiera realizar algo después de que el archivo haya sido editado (por ejemplo, envíe la nueva versión a algún lugar o haga algo con la nueva versión).Si no quieres esperar, corre
xdg-open
en segundo plano. Puede ejecutar cualquier comando de shell en segundo plano colocando un ampersand al final.Con algunos programas,
xdg-open
regresa de inmediato. Lo que sucede es que el programa quexdg-open
invoca regresa de inmediato. Esto suele suceder con los programas GUI que abren todos los archivos en una sola instancia: cuando los inicia por segunda vez, envían un mensaje a la instancia en ejecución para indicarle que abra el archivo y salgan inmediatamente.fuente
xdg-open
regresa de inmediato (puedo confirmar eso en Ubuntu 16.04), pero el programa que invoca puede pasar a un segundo plano. Por ejemplo, en mi sistema,xdg-open
invoca Evince para archivos PDF;evince foo.pdf
bloquea hasta que cierre el archivo PDF, a menos que el PDF ya esté abierto, en cuyo caso el segundoevince
proceso iniciado porxdg-open
enfoca la instancia existente y sale.xdg-open
no tiene control sobre eso, a menos que haya una manera de hacer que el programa mantenga un proceso en ejecución.Al combinar la respuesta de terdon y la discusión de Dan D. sobre
nohup
yo, creé una función que hace exactamente lo que quiero:Agregué esto a mi
.bashrc/.zshrc
archivo:Para una explicación de
/dev/null 2>&1
ver esta discusión sobre escondersestdout
ystderr
.fuente
Prueba esto:
Utilizo esta técnica para poner en cola magnet: // URL en mi cliente de Bit Torrent Vuze.
Las comillas simples ayudan a proteger el contenido de las URL para que el shell no intente interpretarlas.
fuente
xdg-open
? Parece que varios de los que respondieron aquí han indicado que el comportamiento normal es que el control se devuelve al terminal después de un período de tiempo.Si necesita abrir páginas web desde la línea de comandos (bucle), puede abrir el navegador antes de iniciar el script.
En este caso, no espera a que se cierre el navegador después del primer enlace, sino que los abre a todos en nuevas pestañas.
fuente
Como hoy, ninguna de esas opciones funcionó para mí. Soy totalmente consciente de que el OP dijo "use xdg-open", lo siento de antemano.
Terminé haciendo un simple muerto
chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es
.Si no tiene ninguno de esos 3 navegadores, no dude en usar los correctos con su preferencia de orden.
Nota: Firefox abrió una nueva ventana sin agregar nada. El estuche no funciona mal para ti, úsalo
firefox https://google.es -new-instance -new-window
. Tenga en cuenta que es solo uno-
para las banderas de Firefox.fuente
Desown es el comando correcto para esto.
Utilizo 2 funciones para esto, para mantenerlo más legible.
fuente
disown
no evita que se envíen errores al terminal.