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-569343

Sebastian Carlos's questions

Martin Hope
Sebastian Carlos
Asked: 2023-10-30 17:51:02 +0800 CST

Por que MB_CUR_MAX 6 em vez de 4 para UTF-8? (Linux, glibc)

  • 5

MB_CUR_MAXé definido pela glibc como 'uma expressão inteira positiva que é o número máximo de bytes em um caractere multibyte no código do idioma atual.'

Se eu imprimir o valor eu recebo 1. Presumo que isso ocorre porque C usa a Clocalidade por padrão, mesmo que a localidade do meu sistema seja en_US.UTF-8.

Se eu adicionar setlocale(LC_ALL, "")ao meu programa, que deve permitir o uso da localidade do ambiente, ele MB_CUR_MAXse tornará 6.

Agora minha pergunta é: por que 6? UTF-8 não é uma codificação com 1 a 4 bytes por ponto de código?

c
  • 1 respostas
  • 69 Views
Martin Hope
Sebastian Carlos
Asked: 2023-08-01 05:08:20 +0800 CST

Qual é a diferença entre "-dm" e "-Dm" no GNU Screen?

  • 5

O manual do GNU Screen diz:

    `-d -m'
          Start `screen' in _detached mode. This creates a new session
          but doesn't attach to it. This is useful for system startup
          scripts.

    `-D -m'
          This also starts `screen' in _detached_ mode, but doesn't fork
          a new process. The command exits if the session terminates.

-dmestá bem claro para mim:

  • screenbifurca um novo processo para executar o comando fornecido (ou um shell se nada for especificado).
  • Por "fork" significa aquela estranha chamada de sistema de Schrödinger na qual o código-fonte não sabe se é o pai ou o filho até que o valor de retorno seja observado.
  • E esse novo processo é reconhecido por screencomo algo que pode ser anexado.

Percebi que -dmretorna o controle do shell, mas -Dmbloqueia.

Então minha pergunta é:

  • Por que -Dmbloqueia? E como isso está relacionado à falta de bifurcação?
  • O que ele faz em vez de bifurcar? Acho que ainda cria um novo processo, porque "modo separado" sugere um processo identificável por um PID que pode ser anexado.
  • Qual é o caso de uso de -Dmem vez de -dm?

Obrigado!

shell-script
  • 1 respostas
  • 36 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-26 20:44:32 +0800 CST

Assim como existe "localizar" para "encontrar". Existe um banco de dados para um "grep" mais rápido?

  • 5

locate(ou melhor, updatedb) é um tanto simples: pega a saída de findpara os caminhos necessários (geralmente '/'), classifica-a e depois a compacta com uma ferramenta de compactação frontal ( frcode), na qual os prefixos comuns consecutivos são substituídos por número de caracteres repetidos.

Então, eu estou pensando, o que está impedindo alguém de criar algo semelhante para pesquisa de texto completo? Diga, que tal concatenar cada arquivo no sistema, classificar cada linha com o formato line:filename:linenumbere fazer a compactação frontal? Acho que você acabaria com um grep, com a desvantagem de estar desatualizado até que o cron job diário/semanal seja executado, assim como locate.

Talvez locategrepseja um exagero para todo o sistema, mas posso ver que é útil para acelerar um grande projeto que não mudará muito pelo resto do dia.

Algo assim já existe ou é trivial de implementar com algumas ferramentas conhecidas?

Observação: prefiro evitar soluções corporativas que incluam recursos além da pesquisa de texto simples (mas aprecio o suporte a regex).

grep
  • 1 respostas
  • 36 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-20 00:53:52 +0800 CST

Como limpar o suspense (ctrl-z) em um script Bash?

  • 9

Eu tenho o seguinte roteiro:

suspense_cleanup () {
  echo "Suspense clean up..."
}

int_cleanup () {
  echo "Int clean up..."
  exit 0
}

trap 'suspense_cleanup' SIGTSTP 
trap 'int_cleanup' SIGINT

sleep 600

Se eu executá-lo e pressionar Ctrl-C, Int clean up...show e ele sai.

Mas se eu apertar Ctrl-Z, os ^Zcaracteres são exibidos na tela e depois trava.

Como posso:

  • Execute algum código de limpeza em Ctrl-Z, talvez até ecoando algo, e
  • prosseguir com a suspensão depois?

Lendo aleatoriamente a documentação do glibc, encontrei isto:

Os aplicativos que desativam a interpretação normal do caractere SUSP devem fornecer algum outro mecanismo para o usuário interromper o trabalho. Quando o usuário invoca esse mecanismo, o programa deve enviar um sinal SIGTSTP para o grupo de processos do processo, não apenas para o próprio processo.

Mas não tenho certeza se isso se aplica aqui e, de qualquer forma, não parece funcionar.

Contexto: Estou tentando fazer um shell script interativo que suporte todos os recursos relacionados ao suspense que o Vim/Neovim suporta. Nomeadamente:

  1. Capacidade de suspender programaticamente (com :suspend, em vez de apenas permitir que o usuário pressione Ctrl-z)
  2. Capacidade de executar uma ação antes de suspender (salvar automaticamente no Vim)
  3. Capacidade de executar uma ação antes de retomar (VimResume no NeoVim)

Edit: Mudar sleep 600para for x in {1..100}; do sleep 6; donetambém não funciona.

Editar 2: funciona ao substituir sleep 600por sleep 600 & wait. Não tenho certeza de por que ou como isso funciona, ou quais são as limitações de algo assim.

bash
  • 3 respostas
  • 153 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-13 18:06:40 +0800 CST

Algum multiplexador de terminal (tela, tmux, zellij) oferece suporte à suspensão de trabalho (Ctrl-Z) no Bash?

  • 5

Tanto quanto eu vi, pressionar Ctrl-Z em qualquer multiplexador de terminal, ou tentar iniciá-los em segundo plano, não faz nada ou trava.

Eu sei que, de certa forma, os multiplexadores de terminal são um "substituto" para o controle do trabalho e, geralmente, eles têm seus próprios mecanismos para suspender e retomar. Ainda assim, eu queria saber se poderia integrá-los de alguma forma em um fluxo de trabalho baseado no controle de trabalho do shell.

Responder:

  • A tela suspende com "Ca z"
  • Tmux suspende com "Cb Cz"
  • Zellij suspende com "Co d", mas ao contrário dos anteriores, não coloca o processo no controle de tarefas do shell.
tmux
  • 2 respostas
  • 36 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-12 15:49:44 +0800 CST

É uma boa ideia colocar "export BASH_ENV=~/.bashrc" no meu .bashrc?

  • 5

Digamos que meu Bash tenha uma ~/.bashrcpersonalização extensa que me ajude não apenas no uso interativo, mas também na criação de scripts (aliases, funções, variáveis, etc.). Eu gostaria de ter isso disponível para todos os meus scripts, então estava pensando em configurar BASH_ENV( ~/.bashrco que parece ser a maneira de fazer isso).

Minha pergunta é, há algum problema nisso?

  • Uma preocupação é que qualquer script de shell de terceiros que eu use possa entrar em conflito com meu arquivo ~/.bashrc. Mas eu vejo isso como um problema administrável, já que eu os examinaria antes de usá-los de qualquer maneira (ou confiaria cegamente em estatísticas esotéricas como as estrelas do Github para considerá-los seguros), e apenas ocasionalmente me rebaixaria a desarmar qualquer script que pudesse estar se comportando mal BASH_ENV.
  • Outra preocupação é a velocidade, mas honestamente, o meu ~/.bashrcnão é tão pesado e, se eu quisesse velocidade, não estaria usando um script de shell.
  • Outra preocupação é a segurança. Mas se eu executar um script malicioso com algum tipo de status setuid ou privilegiado, já estou vivendo o estilo de vida YOLO, e isso ~/.bashrcseria apenas um condimento moderado para o prato principal de minha emboscada total.
  • Outra preocupação é que, de um ponto de vista purista, pode ser melhor dividir my ~/.bashrcem dois arquivos, um para uso interativo e outro para script, e talvez configurá-lo para que o interativo seja um superconjunto do de script. Mas isso soa como muito trabalho para pouco ganho, exceto pela sensação difusa de pureza.
  • Outra preocupação é a portabilidade, mas estou escrevendo scripts principalmente para mim. Se eu quiser compartilhá-los com outras pessoas mais tarde, não seria tão difícil generalizar. Se as coisas piorarem, sempre posso escrever um script para incorporar automaticamente quaisquer ~/.bashrcrecursos que esteja usando. Isso não soa como um problema NP.
  • Também pode ser argumentado que minha abordagem é falha, já que qualquer script que possa se beneficiar de recursos não padrão do my ~/.bashrc, indica que tal script deve ser escrito em outro idioma para começar.
  • Por outro lado, a filosofia Unix/Linux não é apenas um conjunto de padrões, mas um conjunto de ferramentas para personalizar seu ambiente de acordo com suas necessidades, então porque não.
bash
  • 1 respostas
  • 47 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-06 15:17:35 +0800 CST

Por que "sim e" trava minha sessão Bash?

  • 30

"Sim, e..." é uma regra prática maravilhosa na comédia improvisada. Não tanto no mundo UNIX.

Quando executo o yes&comando reconhecidamente bobo, não consigo interrompê-lo. O terminal trava ou fica preso em um loop.

Espero que o yesprocesso seja suspenso imediatamente, pois qualquer processo em segundo plano deve ser suspenso se tentar gravar no stdout, mas não parece ser o caso e estou me perguntando o porquê.

bash
  • 2 respostas
  • 4866 Views
Martin Hope
Sebastian Carlos
Asked: 2023-07-05 17:52:23 +0800 CST

Por que Bash redireciona mesmo quando não há comando?

  • 5

O manual do Bash diz que, após realizar as expansões

Se nenhum nome de comando resultar, os redirecionamentos serão executados, mas não afetarão o ambiente de shell atual.

Agora, o que é um caso de uso para isso? Qual é o sentido de redirecionar se não há nada a fazer e o redirecionamento nem afeta o ambiente atual do shell?

bash
  • 2 respostas
  • 41 Views
Martin Hope
Sebastian Carlos
Asked: 2023-06-13 18:27:35 +0800 CST

Alterar programaticamente o separador de campo (FS) e recalcular o registro atual no gawk?

  • 9

Desejo alterar o separador de campo ( FS) apenas para um registro específico e desejo que o registro ( $0), os campos ( $N) e o número de campos ( NF) sejam recalculados usando o novo separador de campo. Mas não parece funcionar.

Exemplo: Aqui eu tenho uma única linha que é interpretada como três campos separados por espaços em branco. Se eu mudar o separador de campos para ne forçar a reconstituição do registro ( $1 = $1), o registro continua o mesmo, como pode ser visto imprimindo $1:

$ echo 'one two three' | awk '1 {FS="n" ; OFS=":" ; $1 = $1 ; print $1}'
> one

Mas eu esperaria que a saída fosse:

> o

O truque de forçar o registro a ser reconstituído por execução $1 = $1é retirado do manual gawk . Então eu esperaria que funcionasse. Não tenho certeza do que poderia ser o problema:

É um erro comum tentar alterar os separadores de campo em um registro simplesmente definindo FSe OFS, e então esperando um simples printou print $0imprimir o registro modificado.

Mas isso não funciona, porque nada foi feito para alterar o registro em si. Em vez disso, você deve forçar a reconstrução do registro, geralmente com uma instrução como $1 = $1[...]

(estou usando o GNU Awk 5.2.2)

awk
  • 2 respostas
  • 483 Views

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

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