Como faço para abrir um arquivo de dentro de um script bash?

22

Ok, então correr gedit myfile.txtfunciona bem. Mas e quanto a abrir um arquivo de dentro de um script bash, usando o aplicativo de desktop padrão vinculado ao tipo de arquivo?

Eu tentei abaixo, o que funciona muito bem quando executado manualmente no terminal, mas quando o coloco em um arquivo bash, nada acontece:

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

O que devo fazer em vez disso?

Observe que eu preciso que o arquivo permaneça aberto após o fechamento do terminal também.

Industrial
fonte
1
tente fornecer o caminho do arquivo .. e você tem certeza de que deve estar entre aspas? Tente sem aspas
abhishek
7
Tem certeza de que o comando não faz nada? Acabei de criar um script com o conteúdo que você lista e ele abre geditcom o arquivo listado (ou abre uma nova guia em uma sessão existente). Porém, ele retorna imediatamente, em vez de bloquear até que o programa saia.
James Henstridge
3
Além disso, quais erros você recebe ao executar seu script a partir de um terminal?
Takkat 16/01/12
Sim. Eu uso o caminho completo para o arquivo no meu script, mas o removi aqui para esclarecer. Não há diferença com ou sem aspas. Eu tentei xtg-openem *.txt, *.htmle mais - apenas não vai funcionar.
Industrial
5
@abhishek: Não há casos em que as cotações sejam prejudiciais em tais situações, e muitos casos em que a omissão de cotações pode causar problemas. É uma boa prática criar o hábito de sempre citar todas as strings, mesmo quando desnecessárias, a menos que você tenha um motivo específico para não fazê-lo.
Scott Severance

Respostas:

16

Eu acho que seu script deve funcionar. Mas você pode adicionar algo para obter um pouco mais de informação:

#!/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"

ao executar este script (chamado my_open.sh) em um terminal como este:

my_open.sh path/to/somefile.txt

Eu recebo a seguinte saída:

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

que me diz que o caminho para o arquivo está correto, o tipo MIME é reconhecido e o arquivo da área de trabalho usado para abrir o arquivo também está correto. E o gedit abre com o arquivo em questão.

Agora, quando executado em outro arquivo:

my_open.sh path/to/README

Eu recebo a seguinte saída:

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

Observe o tipo de mim diferente e o arquivo da área de trabalho ausente. No entanto, o xdg-open abre o padrão para todos os arquivos de texto (gedit).

Portanto, você pode adicionar algo assim ao seu script e ver se obtém resultados inesperados (que podem ser adicionados à sua pergunta ...).

xubuntix
fonte
bem, exceto pelo barulhento finished scriptno final. Eu recomendo [ catb.org/~esr/writings/taoup/html/{ (A arte da programação Unix), a regra do silêncio. Btw .: Backticks estão obsoletos - prefira $ (...), que é aninhado.
usuário desconhecido
2
bem, o script deve fornecer informações adicionais. As informações fornecidas pelo 'script finalizado' são as de que você não precisa nohupou &, mas que xdg-openretorna e permite que você continue.
Xubuntix 22/01/12
É para isso que o prompt se destina.
usuário desconhecido
3
verdade. apenas pensei que seria mais óbvio assim. na verdade, todo o roteiro não é necessário, porque não mais do que xdg-openjá faz, então isso não é um script qualidade da produção de qualquer maneira ...
xubuntix
5

Faça um script bash test.sh como:

#!/bin/bash
gedit myfile.txt

Em seguida, torne o script executável como:

chmod +x test.sh

Por fim, execute o script como:

./test.sh
choc
fonte
Obrigado pela sua resposta, mas infelizmente eu preciso abrir o editor de arquivos padrão do GNOME para o arquivo, como mencionado acima.
Industrial
3

Talvez gnome-open em vez de xdg-open

Denis
fonte
Eu encontrei esta solução funcionou melhor
Jon
E se o usuário não estiver no Gnome?
Goddard
2

Você está indo na direção correta. Se você deseja que o aplicativo GUI permaneça aberto ao fechar a janela do terminal, basta adicionar um nohupno início da linha.

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

Se o aplicativo GUI não estiver abrindo, provavelmente porque você não possui a DISPLAYvariável de ambiente definida no shell da qual está tentando iniciá-lo. Tente fazer um eco$DISPLAY

Marca
fonte
3
O xdg-open não exige nohupnem&
xubuntix
0

A primeira parte da sua pergunta

com o comando, catvocê pode abrir um arquivo dentro do terminal, se é isso que você deseja (está indicado na primeira parte da sua pergunta).

Para usá-lo, basta digitar cat FILENAME.

Outra informação

Se você precisar de mais comandos: Aqui está uma boa lista de comandos.

Editor padrão do GNOME

Se você deseja abrir o arquivo no aplicativo padrão do GNOME gedit.

para usá-lo, basta digitar gedit FILENAME

Alvar
fonte
Isso abre o arquivo no terminal, mas não o editor padrão do GNOME
Industrial
@industrial editou minha resposta.
Alvar
Infelizmente, o open não funcionará ...
Industrial
@ Industrial O que você está pedindo? explique mais a sua pergunta! você diz várias coisas diferentes e eu ter respondido a um deles, mas você diz que não quer usá-lo ...
Alvar
@ Industrial, o editor de texto padrão no GNOME é o gedit, também conhecido como "editor de texto"; portanto, se você executar gedit file.filetype, abrirá o arquivo como quiser!
Alvar 21/01
0

Embora eu não tenha certeza do que realmente deve ser realizado aqui e com base em comentários recentes de que um único script deve abrir QUALQUER arquivo no aplicativo padrão ou na medida em que o aplicativo suporta isso.

Se assim for maneira, então mais fácil de fazer isso seria abrindo um terminal e vai scriptname / path / to / filename ou se houver espaços no caminho, então scriptname '/ path / to / filename'

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

Use isso como um script, você pode usar qualquer nome que desejar para o script, usarei o openit1 como exemplo. É melhor usar scripts diretamente de ~ / bin para adicionar um número ao nome, para que não haja conflito com nenhum comando linux existente

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

Feche o gedit e no terminal

chmod u+x ~/bin/openit1

Reinicie para adicionar ~ / bin ao seu $ PATH

Para chamar, abra um terminal e vá

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

SE, como orig declarado e usando o orig. script para um arquivo específico por script e invocação por d. clique esquerdo no script, basta escolher " Executar " em vez de "Executar no terminal"

doug
fonte
Restart to add ~/bin to your $PATHhábitos antigos do Windows? ;)
usuário desconhecido