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

Whimusical's questions

Martin Hope
Whimusical
Asked: 2024-04-14 01:12:45 +0800 CST

Compreendendo o efeito do redirecionamento da saída de uma chamada de função que torna a mutação de variável não visível

  • 6

Observei um comportamento estranho no zsh 5.9 no mac. (A seguir está uma simplificação para reproduzir o erro, não tenta fazer sentido). Se eu executar em um terminal

$> function assigner() { OPTIONS=mutated } 
$> function main() { typeset OPTIONS; assigner; echo $OPTIONS }  
$> main

Isso produz:

mutated

Mas se eu alterar sutilmente a função principal para redirecionar a saída da chamada de função interna...

$> function main() { typeset OPTIONS; assigner | cat; echo $OPTIONS }

Então o resultado está em branco

E minha var OPTIONS não está mais preenchida. O que esta acontecendo aqui?

zsh
  • 1 respostas
  • 54 Views
Martin Hope
Whimusical
Asked: 2024-03-25 05:33:27 +0800 CST

Qual é a diferença de passar um comando sleep para tmux new-session -d e não passar nada?

  • 5

Eu estava brincando com um script que envia texto para um tmux stdin após esta resposta ( https://unix.stackexchange.com/a/773049/189571 por @Kamil Maciorowski) e estava fazendo isso de forma errada

tty=$(tmux new-session -d -s aux -PF "#{pane_tty}")
echo -n foo > $tty && tput cr > $tty && echo bar > $tty
tmux capture-pane -t aux -p -S0 -E3

o que resulta em foo PROMPT %> bar(sequenciado indeterminadamente e PROMPT é impresso)

enquanto o mesmo, mas usando o comando tail -f /dev/nullcomo argumento de tmux new-session, como sugeriu Kamil, dá barcomo resultado, que é o que eu esperava

Gostaria de entender por que sem cauda tudo falha. Aqui não é tail -f /dev/nulluma espécie de sleep infinity? Qual é a diferença em não passar nenhum comando? Quero dizer, se você não passar nada para a nova sessão, o painel será mantido ativo até a sessão de eliminação também

tmux
  • 1 respostas
  • 25 Views
Martin Hope
Whimusical
Asked: 2024-03-25 05:01:27 +0800 CST

TERM ANSI sequências de escape compatibilidade entre xterm e tela embora infocmp não diga isso

  • 5

Estou fazendo um script em zsh no mac que usa tmux e depois da incrível resposta https://unix.stackexchange.com/users/22565/st%c3%a9phane-chazelas , descobri que quando uso tmux, ele usa um intérprete diferente daquele da minha máquina host.

Portanto, como estou gerando os mesmos literais para os painéis tty e tmux a partir dos meus comandos tput de script, queria saber se havia alguma incompatibilidade nas sequências de escape ANSI que estou produzindo.

Descobri que $TERM é xterm-256color no meu mac e screen-256color em um painel tmux, por isso emiti

%> infocmp xterm-256color screen-256color

Estou usando código que usa tput clear, civis, sgr0, cnorm, rc, sc, home, cd, cr, el, cub1, cud, cuf. O código está funcionando, a saída é produzida no contexto xterm com tput e é bem renderizada em tty e tmux quando tee'ed.

Mas de acordo com o infocmp, clear, por exemplo, tem sequências de escape diferentes em ambos os termos:

comparing xterm-256color to screen-256color.
        clear: '\E[H\E[2J', '\E[H\E[J'

então como isso pode funcionar?

Como questão secundária, muitos dos meus comandos não aparecem na comparação. Isso significa que eles não são suportados teoricamente ou que são comuns em ambos os termos?

tmux
  • 1 respostas
  • 20 Views
Martin Hope
Whimusical
Asked: 2024-03-23 08:19:58 +0800 CST

Redirecionando stdout de um script como stdin de outro script/comando em execução em uma sessão tmux

  • 5

Estou adaptando a resposta de Marcus Müller a uma pergunta que fiz na semana passada - um script que redireciona seu stdout para uma sessão tmux para renderizar sequências de escape ANSI e, em seguida, captura a renderização do painel como a saída real do script. Eu sei que não é nada útil, já que você pode imprimi-lo diretamente no stdout e ter o mesmo resultado, mas é apenas uma demonstração para brincar, para trazer o código para um projeto maior e mais complexo de explicar, onde preciso desse recurso :

#!/bin/zsh

tmpdir="$(mktemp -d)"
fifo="${tmpdir}/fifo"
mkfifo "$fifo"
tmux new-session -d -s aux "while true; do cat ${fifo}; done"

exec 3>&1 1>"$fifo"


echo foo
echo bar
tput home
echo -n b

exec 1>&3 3>&-

tmux capture-pane -t "aux" -p -S0 -E1
tmux kill-session -t aux
rm -rf $tmpdir

quais saídas (e devem):

boo
bar

Estou interessado em simplificar o código. É possível usar algum truque que funcione com o redirecionamento stdin em vez de um fifo que precisa ser mantido? Posso usar uma linha de alguma forma que continue imprimindo tudo e feche a sessão automaticamente quando terminar?

Eu tentei e brinquei com tmux pipe-pane, buffer, send-keys e run-shell e não consegui. Principalmente quando a sessão leva stdin como se você tivesse escrito um comando no console, não como o stdin do script que um comando/script que está rodando

Eu sinto que deve ser simplificável de alguma forma.

zsh
  • 3 respostas
  • 73 Views
Martin Hope
Whimusical
Asked: 2024-03-16 17:41:39 +0800 CST

Como "renderizar" a saída de um comando reproduzindo tput para que apenas o resultado final pós-processado pelo terminal seja mantido?

  • 7

Capturei a saída de um script que usa tput para desenhar certas coisas na tela. Quando executo cat myoutput, tudo é bem visto (parece que o terminal o reinterpreta desde o início), mas quando edito ou canalizo essa saída, vejo muitas sequências ansi e todas as coisas anteriores à impressão destrutiva, como tput clear e similares.

Como posso pós-processá-lo para obter apenas a "renderização" final?

Melhor ainda, a origem disso é que atualmente estou testando meu script para que ele imprima tudo em um arquivo, exceto no terminal

comexec > >(tee /dev/tty)

existe uma maneira de dizer ao canal stdout para "renderizar" tudo antes de salvar?

zsh
  • 1 respostas
  • 35 Views
Martin Hope
Whimusical
Asked: 2024-03-11 08:32:48 +0800 CST

Problema de leitura com -u e -k em zsh

  • 5

Estou desenvolvendo um script zsh que usa read -k. Se eu executar meu script assim ( echo a | myscript), ele não conseguirá obter entrada. Aparentemente, isso se deve ao fato de que -k usa /dev/tty como stdin invariavelmente, e você deve informar read para usar stdin como em read -u0.

Mas então, se eu mudar para -u0 (o que faz o caso anterior funcionar) e executar meu script sem redirecionar tty, ele quebra o script, ele simplesmente não se comporta como executá-lo sem -u0.

EDIT : Após a depuração, parece que o problema é simplesmente que depois de usar -u0, a opção -k1 não lê um único caractere e para mais. read funciona neste caso sem -k, simplesmente armazenando em buffer todas as entradas e salvando-as assim que um EOL chegar

EDIT2 : Depois de mais depuração, sei que é algo relacionado ao modo bruto que não funciona com -u0. Se eu adicionar stty raw/cooked antes da minha leitura, ele funcionará (exceto que o pressionamento de tecla Enter agora é tratado com \r e não \n), mas quando eu o executo com stdin não-tty, ele quebra.

Existe alguma maneira de tornar os dois modos compatíveis?

Na verdade, eu gostaria de entender por que o script se comporta de maneira diferente, se eu leio com -u0 ou não, fd0 é por padrão o mesmo que /dev/tty

zsh
  • 1 respostas
  • 48 Views
Martin Hope
Whimusical
Asked: 2024-02-25 02:52:52 +0800 CST

Script que lê a entrada do terminal. Como dizer ao script para imprimir em tty e stdout caso seja chamado com um redirecionamento stdout?

  • 5

Eu tenho um script que pede entrada dos usuários no terminal, portanto caso o script seja chamado com stdout redirecionado para um arquivo, o usuário não tem contexto no prompt. Então, eu gostaria de duplicar o stdout para ambos os sites.

O script gera um cálculo, portanto ainda faz sentido permitir o redirecionamento stdout.

Mas se stdin for fornecido (tipo de comando sim ou contexto não interativo como um cron), faz sentido que a saída seja perfeitamente permitida para não ser exigida no tty.

Então, eu gostaria de fazer algum tipo de lógica como:

If (test -t 0 && ! test -t 1);
  // Tell stdout to print everything  to tty as well

Isso é possível? Ou é fundamentalmente inapropriado?

shell-script
  • 1 respostas
  • 38 Views
Martin Hope
Whimusical
Asked: 2024-02-25 01:41:21 +0800 CST

Como identificar quais descritores de arquivo estão associados a STDIN, STDOUT etc.

  • 5

Parece que me lembro de algum comando ou envvar que diz isso. Eu gostaria basicamente que algo executado no terminal, por exemplo, fornecesse

echo $STDIN 
/dev/tty
echo $STDOUT
/dev/tty
fdescribe 0 or fdescribe /dev/stdin
/dev/tty
fdescribe 1 or fdescribe /dev/stdout
/dev/tty

mas isso pode ser executado em um script ou subprocesso

stdout
  • 1 respostas
  • 23 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