Quero melhorar meu script bash para que ele abra novas abas com expressões de termos em polonês. Quero que ele funcione com Linux.
O que consegui fazer reflexivamente no script bash?
" en_dictionary.sh " ( MVE adicionado apenas após a primeira correção é a entrada para baixo, role para baixo)
#!/bin/bash
url="https://www.diki.pl/slownik-angielskiego?q="
for e in $(cat lst-pl_wrds.txt)
do
for o in $e
do
url="${url}${o}&end"
firefox --new-tab "$url" & timeout 1 >nul
done
done
O exemplo acima, embora sintaticamente correto, não será capaz de executar a tarefa como imaginamos devido ao fato de ser um fantoche. É apenas para o esboço da funcionalidade.
Para estimular a imaginação de como ele deve se comportar, mostrarei o script em lote, que é totalmente operacional no Windows.
" en_true_up.bat " (exemplo funcional de outro sistema operacional)
@ECHO OFF
SETLOCAL
REM remember set "Encoding" to "ANSI" for "lst-pl_wrds.txt"
chcp 1250
fOR /f "delims=" %%e IN ('type "lst-pl_wrds.txt"') DO FOR %%o iN (%%e) do start "%%o" /d "C:\Program Files\Mozilla Firefox" firefox.exe "https://www.diki.pl/slownik-angielskiego?q=%%o&end"&timeout /t 1 >nul
GOTO :EOF
" lst-pl_wrds.txt "
łódka dwa trzy cztery piec
Com base em um script de lote funcional e um bash fictício, é possível criar instruções bash adequadas, com o mesmo poder do Windows?
O que eu quero? Script funcional com dicionário no Linux. Algo que será uma conversão e modificação eficiente do script.
A solução proposta por você também pode ser inovadora, com recursos da família Unix exclusivos de um sistema específico.
Também encontrei alguns materiais úteis no processo de desenvolvimento:
xargs -a ff_url.txt firefox -new-tab "$line"
Adição: https://wiki.mozilla.org/Firefox/CommandLineOptions
Tenha um enigma interessante e bem-sucedido. Obrigado por quaisquer sugestões e comentários.
Existe uma boa solução de uma perspectiva mais ampla?
Boa sorte.
MCVE acabou de editar:
O en_dictionary.sh
script e o lst-pl_wrds.txt
arquivo necessário para ele, que deveriam ser salvos como UTF-8
neste caso, deveriam retornar abas funcionais, o que não é o caso.
A execução do sh
script mencionado retorna guias com o seguinte URLs
e ainda por cima em uma ordem aleatória, o que não é o comportamento esperado e a sequência de caracteres é inválida:
(1) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&end (?q=łódka&end)
(2) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&endcztery&endpiec&end (?q=łódka&end&enddwa&endtrzy&endcztery&endpiec&end)
(3) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&endcztery&end (?q=łódka&end&enddwa&endtrzy&endcztery&end)
(4) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&end (?q=łódka&end&enddwa&end)
(5) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&end (?q=łódka&end&enddwa&endtrzy&end)
Gostaria que o script en_dictionary.sh
fosse corrigido e melhorado de forma que executá-lo abrisse as seguintes abas no navegador Firefox e, de preferência, mantivesse a ordem delas. Este é o comportamento que espero:
https://www.diki.pl/slownik-angielskiego?q=łódka&end
https://www.diki.pl/slownik-angielskiego?q=dwa&end
https://www.diki.pl/slownik-angielskiego?q=trzy&end
https://www.diki.pl/slownik-angielskiego?q=cztery&end
https://www.diki.pl/slownik-angielskiego?q=piec&end
O mais importante para mim é o efeito e o resultado correto da execução do script. O método não é importante. Espero a ação acima.
Gostaria de destacar mais dois pequenos fatos sobre a operação deste script falho, que não são esperados. Erro no terminal que diz Try 'timeout --help' for more information.
e cria um nul
arquivo no diretório de destino, o que não deveria ser o caso.
Espero que as informações sejam completas e ajudem a criar um en_dictionary.sh
arquivo de trabalho, que é o propósito do tópico.
Configurar:
NOTAS:
Modificando o script do OP para imprimir algumas informações de depuração:
A execução do script gera:
Duas coisas a serem observadas nesta saída:
e
variável sempre contém apenas uma única string, mas pelo código (for o in $e
) parece que o OP está esperando várias stringsfor e in $(cat lst-pl_wrds.txt)
efetivamente se tornafor e in łódka dwa trzy cztery piec rok jutro
(todas as palavras colocadas em uma única linha com um único espaço como delimitador)url
variável continua acrescentando cada nova palavra no final dourl
valorurl="${url}${o}&end"
; o OP está usando a mesmaurl
variável para a url 'base' e também para a url 'nova'Modificando nosso script de teste atual para resolver os problemas acima:
O script modificado gera:
A partir desta saída vemos:
ar[]
é (re)preenchida com as palavras de uma única linha do nosso arquivo de entradaurl
não está mais anexando várias palavras juntasImplementando essas modificações no script atual do OP:
NOTAS:
>nul
é para descartar/ignorar stdout dafirefox
chamada; neste caso, o equivalente unix/linux é>/dev/null
firefox
opções de linha de comando não inclui nada relacionado a 'tempos limite', então estou assumindo que a intenção do OP é esperar 1 segundo entre cadafirefox
invocação; se essa suposição estiver errada, o OP pode modificar afirefox
chamada conforme necessário (e remover osleep 1
?) o&
no final dafirefox
chamada colocará a chamada em segundo planoResultados dos testes:
brave-browser
então substituí afirefox ...
linha porbrave-browser "${url}" > /dev/null &
brave-browser
janela ativa (ou seja, abrave-browser
janela na qual estou digitando esta resposta); cada aba representa uma única palavra e as abas são exibidas na mesma ordem em que são lidas do arquivo:NOTAS:
piec
ejutro
neste exemplo), então pode ser um problema do arquivo que contém as terminações de linha do Windows/DOS (\r\n
)od -c lst-pl_wrds.txt
e se a saída contiver\r
entradas, isso confirma que as terminações de linha do Windows/DOS existem no arquivodos2unix lst-pl_wrds.txt
; isso só precisa ser executado uma vez, pois editará o arquivo e removerá os\r
caracteres