Leia uma URL de um arquivo e abra-a em uma aba do Firefox

6

PreTabs.txt é um arquivo que eu tenho em minha área de trabalho e contém apenas a linha

google.com

Eu quero enviar o conteúdo desse arquivo para o Firefox para que ele abra o URL em uma nova guia.

Se você executar cat PreTabs.txt | firefox ,
não deveria ser o mesmo que firefox [Contents of PreTabs.txt] ?

    
por MibMoot 28.12.2016 / 21:23

2 respostas

4

Tubulação não é o mesmo que passar um argumento para um programa.

Se você executar um programa, um processo será criado. Estou simplificando aqui, mas basicamente todo processo tem um padrão e uma saída padrão. Recebe entrada através do padrão em (talvez) e produz saída em sua saída padrão (talvez). Estes são abreviados como stdin e stdout respectivamente.

Quando você executa um programa no terminal, seu padrão é o que você digita no terminal enquanto está em execução. Sua saída padrão é impressa no terminal.

O que você faz quando executa a | b é executar a e b , mas conectar o stdout do processo a ao processo stdin de b . Ou seja, se a saída criada pelo processo a for alimentada como entrada para o processo b , como se você fosse executar a e b em terminais separados e digitar tudo a ' O processo imprime em seu terminal no terminal em que você está executando b on. Bem, quase. Você só pode fazer um texto, por exemplo, enquanto os processos podem canalizar dados arbitrários para um processo diferente.

Você pode testar isso enviando dados para tee .

Exemplo:

echo foo | tee

echo lê seus argumentos e os grava em sua stdout. Sua stdout está conectada ao stdin de tee . O Tee simplesmente lê seu stdin em uma base por linha e grava sua entrada em sua stdout. Isso significa que "foo" será impresso em seu terminal, pois esse é o stdout do processo de tee .

echo foo | tee | tee | tee

Tem o mesmo efeito, claro.

Você pode fazer coisas mais úteis, que também são bem simples:

echo foo | sha256sum

Calcula e imprime o sha256sum de "foo \ n". Onde \n é um feed de linha porque echo termina sua saída em um feed de linha, caso contrário, o exemplo anterior não seria t funcionou porque tee não teria visto um avanço de linha.

Portanto, seu comando cat PreTabs.txt | firefox executa cat com o argumento PreTabs.txt , o que faz com que cat grave o conteúdo em sua stdout. Esse stdout é o stdin de firefox , o que significa que firefox pode lê-lo. Não é necessário e não há uma regra de como isso deve se comportar. Parece que ele não lê ou lê e ignora.

Se você quiser passar um argumento para um programa, mas esse argumento estiver dentro de um arquivo de texto, você poderá usar os backticks. Comandos entre backticks emparelhados são executados com antecedência e sua saída é colada nesse ponto no comando externo.

Exemplo:

echo bar > foo
echo 'cat foo' > foobar

A primeira linha escreve "barra" no arquivo foo (sobrescreve o conteúdo do arquivo, se já existir, ou cria um novo arquivo). Na segunda linha, cat foo é executado primeiro. Ele lê seu parâmetro foo e aprende que deve ler o conteúdo de foo e imprimi-los em sua stdout. Este stdout é então colado onde

'cat foo'

está na segunda linha, então a segunda linha se torna

echo foo > foobar

que escreve foo no arquivo foobar .

Isso faz com que o Firefox faça alguma coisa:

echo "stackexchange.com" > foo
firefox 'cat foo'

abre uma nova guia que carrega o link no Firefox.

Você disse que no seu caso ele carrega o arquivo cujo nome ele obteve como parâmetro e eu realmente tenho uma vaga lembrança de que ele tenha se comportado assim no passado. Provavelmente, é uma ideia melhor dizer explicitamente o que fazer:

echo "stackexchange.com" > foo
firefox -new-tab 'cat foo'

Isso é definido na página man ( man firefox ) como:

   -new-tab url
          Open url in a new tab.

embora possa ser diferente para a sua versão do Firefox, é claro.

    
por UTF-8 28.12.2016 / 21:54
3

Bastante fácil de realizar com os comandos xargs e nohup e & do bash. O comando exato é este:

xargs bash -c 'nohup firefox $@ &' null  < tabs.txt 

Com um arquivo de testes como este:

$ cat tabs.txt                                         
google.com
askubuntu.com
unix.stackexchange.com

A maneira como isso funciona é simples:

  • redirecione o arquivo tabs.txt como fluxo de entrada para xargs .
  • xargs tratará todos os itens que entram como argumentos e os transmitirá ao comando bash -c '' . A string null é usada apenas para definir o argumento $0 . Pode ser literalmente qualquer string e não é relevante.
  • bash executará nohup firefox $@ & , enquanto substitui todos os argumentos no lugar de $@ . O resultado final é que abrimos o Firefox e o descartamos do processo de bash via nohup e &
por Sergiy Kolodyazhnyy 28.12.2016 / 23:16