AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-563952

Zsar's questions

Martin Hope
Zsar
Asked: 2025-01-09 21:52:45 +0800 CST

Como posso instalar o rsync no Windows 11?

  • 5

Como posso obter no Windows 11 um rsync que se comporte como um rsync do Linux (Debian)?

De acordo com o Reddit :

Basta usar o rsync. Instale o WSL e pronto.

Tenho o recurso do Windows 'Subsistema Windows para Linux' habilitado na minha máquina e posso usar ls no cmd, mas não no rsync. - Mas acredito que ls vem do git , não do WSL. (Por meio da opção do instalador 'Usar Git e ferramentas Unix opcionais no prompt de comando'.)

Gostaria de evitar instalar uma VM/distribuição completa e o GnuWin32 parece estar morto.

Aqui alguém diz

Eu instalo o rsync para Windows através do git-bash.

mas... como? O Bash não pode instalar nada, é preciso um gerenciador de pacotes ou um instalador. Eu verifiquei o instalador mais recente para um componente rsync e ele não tem um.

windows-11
  • 2 respostas
  • 104 Views
Martin Hope
Zsar
Asked: 2025-01-04 00:33:28 +0800 CST

Como o GNU Awk corresponde expressões com grupos de captura?

  • 8

Estou testando isso em um sistema Debian 10 bem antigo usando

GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)

em

GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)

Ambos os comandos awke gawkchamam esta mesma versão do GNU Awk.

Usando essas respostas [1] [2] [3] Estou tentando escrever um script que detecta conflitos de mesclagem gettext emitidos por msgcat.

Entrada de teste de texto simples, referida abaixo como merged_file.po:

"#-#-#-#-#  de.po (Application Library)  #-#-#-#-#\n"
"#-#-#-#-#  de.po (Middleware Library)  #-#-#-#-#\n"
"#-#-#-#-#  de.po  #-#-#-#-#\n"

Escolhi awk em vez de grep e sed para pular um cabeçalho usando NR > <line number>. Como isso funciona sem problemas, omito aqui por brevidade.

Sintaxe da linha:

  1. "#-#-#-#-#
  2. nome do arquivo de origem
  3. (Project-Id-Version) se definido no arquivo de origem
  4. #-#-#-#-#\n"

Expressão regular construída usando RegExr e validada em todos os sabores suportados pelo regex101 : #-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?#-#-#-#-#
(Observe que isso pressupõe que o nome do arquivo não contenha espaços em branco - por enquanto, não me importo.)

O efeito pretendido é duplo:

  1. encontre todas as ocorrências no arquivo .po de saída para emitir uma mensagem de erro
  2. capture o nome da biblioteca no grupo de captura 1 para tornar a mensagem de erro mais fácil de ler (especialmente para pessoas não muito familiarizadas com gettext)

Estas são as invocações que tentei:

  • A linha de base de trabalho awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/ { print NR, $0 }' merged_file.poencontra todas as ocorrências e imprime a linha inteira.
  • awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?#/ { print NR, $0 }' merged_file.podescarta todas as ocorrências com Project-Id-Version
  • awk 'match($0, /#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/, library_name) { print NR, "from library \047"library_name[1]"\047" }' merged_file.poimprime a string vazia em vez de<Project-Id-Version>
    • library_name[0]contém a linha até o grupo não-capturador, então aparentemente matchnão emite grupos de captura - se emitisse, library_name[0]conteria a linha inteira.
  • awk '/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/ { library_name = gensub(/#-#-#-#-#\s+\S+\s+(?:\(([^()]+)\)\s+)?/, "\\1", "g"); print NR, "from library \047"library_name"\047" }' merged_file.poimpressões "(<Project-Id-Version>) #-#-#-#-#\n"em vez de<Project-Id-Version>
    • \\0na verdade contém a linha inteira.
    • \\2contém a mesma string que \\1though. (esperado: vazio)

O suporte a RegEx em ferramentas relacionadas, como grep ou sed, costuma ser surpreendentemente vestigial, então, em vez de apenas perguntar por que minhas invocações específicas não funcionam, prefiro perguntar de forma mais geral:

Como a correspondência de expressões regulares do GNU Awks difere da "norma"?

Respostas X/Y (definitivamente) válidas:

  • Estou usando uma versão muito antiga. (Se sim: qual delas eu preciso no mínimo?)
  • Sou cego e meu RegEx está quebrado. (Se sim: como?)
  • A culpa é do Bash e eu preciso de algumas fugas arcanas. (Se sim: quais e por quê?)
  • Baeldung está errado desta vez e, afinal, há uma solução muito mais fácil que não seja usar Awk. (Se sim: qual?)
    • Para que eu não sofra o mesmo problema novamente no futuro, eu gostaria de receber este em adição a , não em vez de uma resposta à pergunta em si. Eu realmente gostaria de entender melhor o que posso esperar do Awk e o que não posso.
regex
  • 1 respostas
  • 59 Views
Martin Hope
Zsar
Asked: 2024-12-08 03:08:30 +0800 CST

String de versão de escape que o Telegram interpreta como URL

  • 6

O Potion Craft 2.0 foi lançado hoje e escrevi para dois dos meus conhecidos

Olá, a versão 2.0.1.1 foi lançada!

sabendo que já tinham desinstalado o jogo há muito tempo, cansados ​​de esperar por uma atualização que talvez nunca chegasse.

... O Telegram interpreta isso como URL https://2.0.1.1e gera um link clicável. Neste caso em particular, isso é "inofensivo": há um servidor lá, mas ele não responde. Eu preferiria não criar um link "acidentalmente" para sabe-se lá onde e, mesmo que eu não receba malware em retaliação, parece rude incomodar um servidor aleatório.

Como faço para escapar a string '2.0.1.1' para que o Telegram exiba 2.0.1.1e não insira um hiperlink?

Eu tentei \2.0.1.1, """"2.0.1.1"""", 2\.0\.1\.1sem sucesso.

Infelizmente, a pesquisa do Google ainda é envenenada por "como faço para evitar que a miniatura de visualização do link seja gerada", o que costumava ser um problema alguns anos atrás.

url
  • 1 respostas
  • 32 Views
Martin Hope
Zsar
Asked: 2024-11-23 03:30:19 +0800 CST

Como transformar tubulação baseada em linha em fluxo contínuo?

  • 5

Na minha busca contínua para colocar arquivos .po sob controle de versão do git, escrevi este script para uso em diff e filter-clean: msgcat --no-location --no-wrap --sort-output - | msgattrib --no-obsolete - | grep -Ev '^"POT-Creation-Date|^"PO-Revision-Date|^"Last-Translator|^"X-Generator'

As entradas .gitconfig para chamar este script se parecem com isto:

[diff "podiff"]
    textconv = cat "$1" | "$(git rev-parse --show-toplevel)"/podiff
    cachetextconv = true
[filter "pocomments"]
    clean = "$(git rev-parse --show-toplevel)"/podiff
    smudge = cat "$1" # NOP; enable the other one temporarily to affect files on checkout, restore, etc., but please do not commit it -Zsar 2024-06-10
#   smudge = "$(git rev-parse --show-toplevel)"/podiff
    required

Cada uma das etapas realiza uma função crucial:

  1. Refactors e alterações de código não relacionadas fazem com que a localização da fonte e a ordem de entrada mudem incessantemente. Esta invocação msgcat normaliza essas, então os arquivos commit-tet não têm essas alterações.
  2. Entradas obsoletas dobram o tamanho dos conjuntos de alterações sempre que um msgid muda. Temos controle de versão -> esta invocação msgattrib os remove.
  3. Esses campos na entrada de metadados de um arquivo .po mudam toda vez que alguém o edita com uma ferramenta dedicada - temos controle de versão -> esta invocação do grep os remove.

Agora surgiu outro obstáculo. Percebeu isso --no-wrapna frente? Não funciona.
Além disso, o encapsulamento não é estável: a cada commit estranho, alguém tem uma palavra invertida entre as linhas sem alterações humanas .
Além disso, a ferramenta relacionada Poedit também tem uma configuração "Wrap at", desabilitar o que também não funciona. (Porque ele delega para as ferramentas gettext, nenhuma surpresa aí. Mas isso significa que não há como eu normalizar os arquivos 'só dessa vez' e terminar com isso. - Por isso eu uso um filtro git em primeiro lugar.)

Muito bem, pensei e testei esta invocação para removê-los: sed -z -e 's/\"\n\"//'.
É para concatenar quaisquer linhas encapsuladas em 'msgid' e 'msgstr', de modo que as ferramentas possam encapsulá-las como quiserem, cada dia de uma forma diferente, pelo que me importa.

  • Ele funciona de forma independente: sed -z -e 's/\"\n\"//' test.poimprime a saída esperada.
  • Funciona quando canalizado para from cat: cat test.po | sed -z -e 's/\"\n\"//'imprime a saída esperada.
  • No entanto, quando adicionado ao script existente, a etapa sed não tem efeito.

Parece que ele recebe a entrada linha por linha. Tentei colocá-lo na frente do grep sem melhora, e não consigo movê-lo na frente dos outros dois, pois o msgcat e o msgattrib têm o problema "Eu gosto dos meus wrappers aleatórios" que deu início a toda essa provação.

Posso transmitir a saída do grep ou, mais genericamente, a saída de um pipe baseado em linha , para que meu editor de fluxo possa fazer seu trabalho?

(Nota: Há muitas respostas neste site que dizem "sed não pode fazer isso" - mas sed é projetado especificamente para não se importar com quebras de linha, então isso parece desinformação. Da página do manual:

Sed é um editor de fluxo. Um editor de fluxo é usado para executar transformações básicas de texto em um fluxo de entrada (um arquivo ou entrada de um pipeline). [...] sed funciona fazendo apenas uma passagem sobre a(s) entrada(s) [.]

ênfase minha

O problema é bem claro que há mais de uma entrada, a mesma string que eu quero substituir, dividida entre elas.)

git
  • 1 respostas
  • 34 Views
Martin Hope
Zsar
Asked: 2024-01-25 00:38:54 +0800 CST

Como tornar a saída do script bash compatível com o terminal e o arquivo?

  • 5

No bash, se eu quiser produzir mensagens de status periódicas, posso substituir a anterior emitindo uma combinação de teclas de atalho, por exemplo, como visto aqui , aqui ou aqui . Quando um usuário executa o script diretamente, isso é bom, pois o mantém informado sem sobrecarregar a tela.

No entanto, se quiserem usar o mesmo script em um contexto automatizado, a saída será (deve) ser redirecionada para um arquivo:

./test.sh >log.txt

Neste ponto, nenhum dos \r, \b, \033[0Kfunciona.

Como faço para que isso funcione para ambos os modos?

(Por exemplo, seria bastante simples omitir as mensagens intermediárias, se eu pudesse detectar se o fluxo de saída é um arquivo.)

  • Se possível, gostaria de evitar introduzir um argumento no script. A versão do mundo real já vem com vários.
  • Se possível, eu gostaria de evitar o manuseio dos fluxos de saída dentro do próprio script, por exemplo, conforme esta pergunta , para que não expresse um comportamento surpreendente quando incorporado em outros scripts.

Código de amostra test.sh:

#!/bin/bash

PREVIOUS_JOB_STATUS=""
SECONDS=0          # auto-incremented by Bash; divide by INTERVAL_SECONDS to get number of retries
INTERVAL_SECONDS=3 # interval between polls to the server
TIMEOUT_SECONDS=10 # how long until we give up, because the server is clearly busy (or dead)
while true; do
  RETRY_SECONDS=$SECONDS
  if [ $RETRY_SECONDS -lt $INTERVAL_SECONDS ]; then # in the real world, here would be      the polling operation
    JOB_STATUS='queued'
  else
    JOB_STATUS='processing'
  fi
  RESULT=1                                          # in the real world, here would be ? of the polling operation
  if [ $RESULT -eq 0 ]; then                            # success
    exit $RESULT
  elif [ $RETRY_SECONDS -gt $TIMEOUT_SECONDS ]; then    # failure (or at least surrender)
    echo "Timeout exceeded waiting for job to finish. Current Job Status is '$JOB_STATUS'. Current result code is '$RESULT'."
    exit $RESULT
  elif [ "$PREVIOUS_JOB_STATUS" = "$JOB_STATUS" ]; then # no change yet,      replace last status message and try again
    echo -en '\033[1A\r\033[K' # move one line up                                : \033[1A ,
                               # move to pos1                                    : \r      ,
                               # delete everything between cursor and end-of-line: \033[K  ,
                               # omit line break                                 : -n
  else                                                  # job status changed, write   new  status message and try again
    PREVIOUS_JOB_STATUS=$JOB_STATUS
  fi
  SLEEP_MESSAGE='Waiting for job to finish. Waited '`printf "%02g" $SECONDS`" s. Current job status is '$JOB_STATUS'. Current result code is '$RESULT'."
  echo $SLEEP_MESSAGE
  sleep $INTERVAL_SECONDS
done

Resultado final de ./test.sh:

Waiting for job to finish. Waited 00 s. Current job status is 'queued'. Current result code is '1'.
Waiting for job to finish. Waited 09 s. Current job status is 'processing'. Current result code is '1'.
Timeout exceeded waiting for job to finish. Current Job Status is 'processing'. Current result code is '1'.

Resultado final de ./test.sh >log.txt 2>&1:

Waiting for job to finish. Waited 00 s. Current job status is 'queued'. Current result code is '1'.
Waiting for job to finish. Waited 03 s. Current job status is 'processing'. Current result code is '1'.
^[[1A^M^[[KWaiting for job to finish. Waited 06 s. Current job status is 'processing'. Current result code is '1'.
^[[1A^M^[[KWaiting for job to finish. Waited 09 s. Current job status is 'processing'. Current result code is '1'.
Timeout exceeded waiting for job to finish. Current Job Status is 'processing'. Current result code is '1'.

Produção final desejada de ./test.sh >log.txt 2>&1: igual à produção final de ./test.sh.

linux
  • 1 respostas
  • 29 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve