¿Cómo abro un archivo desde un script bash?

22

Ok, entonces correr gedit myfile.txtfunciona bien. Pero, ¿qué hay de abrir un archivo desde un script bash, usando la aplicación de escritorio predeterminada vinculada al tipo de archivo?

Lo he intentado a continuación, lo que funciona muy bien cuando se ejecuta manualmente en la terminal, pero cuando lo pongo en un archivo bash, no sucede nada:

#!/bin/bash
xdg-open "myfile.txt"&

¿Qué debo hacer en su lugar?

Tenga en cuenta que también necesito que el archivo permanezca abierto después de que se cierre el terminal.

Industrial
fuente
1
intente proporcionar la ruta del archivo ... y ¿está seguro de que debe estar entre comillas? Probar sin comillas
abhishek
77
¿Estás seguro de que el comando no hace nada? Acabo de crear una secuencia de comandos con el contenido que enumera, y se abre geditcon el archivo enumerado (o abre una nueva pestaña en una sesión existente). Sin embargo, vuelve inmediatamente, en lugar de bloquear hasta que el programa salga.
James Henstridge
3
Además, ¿qué errores obtienes al ejecutar tu script desde una terminal?
Takkat
Sí. Utilizo la ruta completa al archivo en mi script pero la eliminé aquí para aclarar. No hay diferencia con o sin comillas. He intentado xtg-openen *.txt, *.htmly más - simplemente no funcionará.
Industrial
55
@abhishek: No hay casos en los que las citas sean perjudiciales en tales situaciones, y muchos casos en los que omitirlas puede causar problemas. Es una buena práctica acostumbrarse a citar siempre todas las cadenas, incluso cuando no sea necesario, a menos que tenga una razón específica para no hacerlo.
Scott Severance

Respuestas:

16

Creo que tu guión debería funcionar. Pero puede agregarle algo para obtener un poco más de información:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

al ejecutar este script (llamado my_open.sh) en una terminal como esta:

my_open.sh path/to/somefile.txt

Me sale el siguiente resultado:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

lo que me dice que la ruta al archivo está bien, se reconoce el tipo MIME y el archivo de escritorio que se utiliza para abrir el archivo también está bien. Y gedit se abre con el archivo en cuestión.

Ahora cuando se ejecuta en otro archivo:

my_open.sh path/to/README

Me sale el siguiente resultado:

opening file  path/to/README  of type  text/x-readme with
finished script

Tenga en cuenta los diferentes tipos MIME y el archivo de escritorio que falta. Sin embargo, xdg-open abre el valor predeterminado para todos los archivos de texto (gedit).

Por lo tanto, es posible que desee agregar algo como esto a su script y ver si obtiene un resultado inesperado (que luego puede agregar a su pregunta ...).

xubuntix
fuente
bien, excepto por el ruido finished scriptal final. Recomiendo [ catb.org/~esr/writings/taoup/html/font>(The art of Unix Programming), la regla del silencio. Por cierto: los backticks están en desuso; prefiera $ (...) en su lugar, que es anidable.
Usuario desconocido
2
bueno, el guión está destinado a dar información adicional. La información dada por 'script finalizado' es que no necesita nohupo &, pero que xdg-openregresa y le permite continuar.
xubuntix
Para eso está destinado el aviso.
usuario desconocido el
3
cierto. solo pensé que sería más obvio de esa manera. En realidad, no se necesita todo el guión, ya que no hace más que xdg-openya lo hace, así que esto no es un script de calidad de la producción de todos modos ...
xubuntix
5

Hacer un script bash test.sh como:

#!/bin/bash
gedit myfile.txt

Luego, haga que el script sea ejecutable como:

chmod +x test.sh

Finalmente, ejecute el script como:

./test.sh
choc
fuente
Gracias por su respuesta, pero desafortunadamente necesito abrir el editor de archivos predeterminado de GNOME para el archivo como se mencionó anteriormente.
Industrial
3

Quizás gnome-open en lugar de xdg-open

Denis
fuente
Encontré que esta solución funcionó mejor
Jon
¿Qué pasa si el usuario no está en Gnome?
Goddard
2

Estás yendo en la dirección correcta. Si desea que la aplicación GUI permanezca abierta cuando cierra la ventana del terminal, entonces solo necesita agregar una nohupal comienzo de la línea.

#!/bin/bash
nohup xdg-open "myfile.txt"&

Si la aplicación GUI no se abre, probablemente sea porque no tiene la DISPLAYvariable de entorno establecida en el shell desde el que está intentando iniciarla. Intenta hacer un eco$DISPLAY

marca
fuente
3
xdg-open no requiere nohupni&
xubuntix
0

La primera parte de tu pregunta.

con el comando catpuede abrir un archivo dentro del terminal, si eso es lo que desea (se indica en la primera parte de su pregunta).

para usarlo solo puedes escribir cat FILENAME.

Otra información

Si necesita más comandos: aquí hay una buena lista de comandos.

Editor predeterminado de GNOME

Si desea abrir el archivo en la aplicación predeterminada de GNOME gedit.

para usarlo, solo escribe gedit FILENAME

Alvar
fuente
Eso abre el archivo en el terminal, pero no el editor predeterminado de GNOME
Industrial
@industrial editó mi respuesta.
Alvar
Desafortunadamente, abrir tampoco funcionará ...
Industrial
@ Industrial ¿Qué estás pidiendo? ¡explica tu pregunta más! dices varias cosas diferentes y he respondido una de ellas, pero dices que no quieres usarla ...
Alvar
@Industrial, el editor de texto predeterminado en GNOME es gedit, también conocido como "editor de texto", por lo que si ejecuta gedit file.filetype, ¡abrirá el archivo como desee!
Alvar
0

Si bien no estoy seguro de lo que realmente se debe lograr aquí y en base a algunos comentarios recientes, un solo script debe abrir CUALQUIER archivo en la aplicación predeterminada o, en cierta medida, la aplicación lo admite.

Si es así , la forma más fácil de hacerlo sería abriendo un terminal y yendo scriptname / path / to / filename o si hay espacios en la ruta, entonces scriptname '/ path / to / filename'

cd; mkdir -p bin && gedit ~/bin/openit1

Use esto como secuencia de comandos, puede usar cualquier nombre que desee para la secuencia de comandos, usaré openit1 como ejemplo. Es mejor cuando se usan scripts directamente desde ~ / bin para agregar un número al nombre para que no haya conflictos con los comandos de Linux existentes.

#!/bin/bash
xdg-open "$1"

Cerrar gedit y en la terminal

chmod u+x ~/bin/openit1

Reinicie para agregar ~ / bin a su $ PATH

Para invocar abra una terminal y vaya

openit1 /path/to/filename or openit1 'path/to/filename' 

SI como el origen declarado y utilizando el origen. guión para un archivo en particular por guión e invocación por d. haciendo clic izquierdo en el script solo necesita elegir " Ejecutar " en lugar de "Ejecutar en la Terminal"

Doug
fuente
Restart to add ~/bin to your $PATH- Uhm, viejos hábitos de Windows? ;)
usuario desconocido el