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

smarber's questions

Martin Hope
smarber
Asked: 2018-05-03 04:04:14 +0800 CST

Preencha a tela do terminal com pontos

  • 1

Eu gostaria de criar uma função drawque preenchesse o terminal com pontos.

De acordo com http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html :

Mova o cursor para frente N colunas: \033[< N>C

Em primeiro lugar, fiz isso para preencher a primeira coluna:

draw_col() {
    local cols=$(tput cols)

    local x=0

    while [[ ${x} -lt ${cols} ]]
    do
        echo -en "\033[${x}C."
        x=$(( x+1 ))
    done

}

draw_cols.png

Por que apenas a primeira coluna não foi totalmente preenchida?

O que há de errado?

bash terminal
  • 1 respostas
  • 262 Views
Martin Hope
smarber
Asked: 2018-03-28 23:42:11 +0800 CST

Embrulhe funções bash em uma função de corredor

  • 1

Meu script bash contém muitos mysqldump blabla > dump.sqle mysq balbla < dump.sqlpara possibilitar a execução no modo de simulação .

Na verdade, o objetivo é criar uma função runpara executar qualquer coisa que eu pedir.

  run echo 'hello world'
  run mysqldump blabla > dump.sql
  run mysql blabla < dump.sql
  run ssh blabla
  # etc


run() {
    if [[ "$(printenv DRY_RUN)" = "yes" ]]
    then
        echo "${@}"
    else
        ${@}
    fi
}

No entanto, isso não funciona:

run "mysqldump -uuser -ppass dbase > dump.sql"

Eu recebo este erro:

mysqldump: não foi possível encontrar a tabela: ">"

bash
  • 3 respostas
  • 454 Views
Martin Hope
smarber
Asked: 2018-03-01 01:36:39 +0800 CST

Atribua o resultado do comando canalizado se for bem-sucedido

  • 1

Quero atribuir à minha variável aa primeira palavra do resultado do comando func <some_arg>apenas se não falhar. E se falhar, preciso registrar isso.

O que fiz até agora é:

func() {
    if [[ $1 -eq 1 ]]
    then
        echo 'hello world'
        return 0
    fi

    echo 'Something wrong has happened!' >> path/to/dev.log
    return 2
}

a=$(func 1)
r=$?

if [[ $r -eq 0 ]]
then
    a=$(awk '{ print $1 }' <<<"$a")
fi

Isso funciona, é claro, mas não gosto de atribuir minha variável aduas vezes.

Eu tentei isso:

  a=$(func 2 | awk '{ print $1 }') || echo 'Something wrong has happened!' >> path/to/dev.log

Mas não registra nada

Existe uma maneira melhor?

bash
  • 3 respostas
  • 60 Views
Martin Hope
smarber
Asked: 2018-01-27 03:06:54 +0800 CST

operação aritmética dentro das regras Makefile

  • 1

Preciso realizar uma operação aritmética dentro de um loop bash conforme explicado abaixo

CYCLE?=3
COUNT=1

download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
    while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
    do \
        COUNT=$$(( $(COUNT)+1 )); \
        SLEEP=$$(( ($(COUNT) / $(CYCLE)) + ($(COUNT) % $(CYCLE)) )); \
        echo "count $(COUNT)"; \
        echo "cycle $(CYCLE)"; \
        echo "sleep $(SLEEP)"; \
        sleep $(SLEEP); \
    done

Isso nunca para e dá o seguinte:

count 0
cycle 4
sleep 0

count 0
cycle 4
sleep 0

....

count 0
cycle 4
sleep 0

Como você pode ver, as variáveis ​​têm os valores iniciais e nunca mudam!

ATUALIZAR

PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"

No entanto, o código a seguir mantém o valor de $$cvazio, antes do loop while e dentro dele.

CYCLE?=3
COUNT=1

download_when_ready: ## Will try the download operations many times till it succeeds or it reaches 10 tries
    @c=$(COUNT);
    @echo $$c;
    while ! composer update $(bundle) 2> /dev/null && [[ $(COUNT) -lt 10 ]]; \
    do \
        echo "$$c"; \
    done
bash make
  • 1 respostas
  • 3231 Views
Martin Hope
smarber
Asked: 2018-01-11 06:48:54 +0800 CST

sed anexar uma linha após um bloco

  • 0

Em um diretório, tenho muitos site.ini.append.php(cerca de 100 arquivos).

Todos eles se parecem com:

[block1]
blabla[]
blabla[]=blabla
...
blabla[]=blabla

[block2]
blabla[]
blabla[]=blabla
...
blabla[]=blabla

[block3]
blabla[]
blabla[]=blabla
...
blabla[]=blabla

No entanto, [block1]tem um número diferente de entradas, dependendo do arquivo. É a mesma coisa para os outros blocos.

Eu preciso adicionar uma nova linha no final de [block2]:

[block2]
blabla[]
blabla[]=blabla
...
blabla[]=blabla
blabla[]=new_entry

E não posso usar apenas o número da linha porque, como disse, os blocos possuem entradas diferentes, [block2]podendo ter 20 linhas em um arquivo, e 10 em outro etc...

eu estava pensando em algo assim

sed -n '/^\[block2\]$/,/^$/ a blabla[]=new_entry' path/to/one_of_the_site.ini.append.php

Mas não funciona, obviamente, porque /^\[block2\]$/,/^$/não é um endereço.

Como faço isso (de preferência usando sed)?

ATUALIZAR

Conforme explicado aqui , /^[block2]$/,/^$/ é um endereço válido.

No entanto, nem a nem i resolvem o problema para mim

sed -n '/^\[block2\]$/,/^$/ a blabla[]=new_entry' path/to/one_of_the_site.ini.append.php 

sed -n '/^\[block2\]$/,/^$/ i blabla[]=new_entry' path/to/one_of_the_site.ini.append.php 

Meio Ambiente

$ sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.
text-processing sed
  • 2 respostas
  • 1497 Views
Martin Hope
smarber
Asked: 2017-11-23 05:17:15 +0800 CST

Execute um script muito lento até que seja bem-sucedido

  • 0

Meu script fetch_remote_work.shé bastante lento porque se conecta a uma rede. Preciso executá-lo várias vezes até que funcione.

./fetch_remote_work.sh

while [ $? -ne 0 ]
do
    ./fetch_remote_work.sh
done

Isso obviamente funciona bem. No entanto, não gosto de ser obrigado a ligar para o primeiro ./fetch_remote_work.sh. Eu sei que em outras linguagens como php , existe um loop do while que executa pelo menos a primeira iteração. O que seria muito limpo se existisse no bash

Então, minha pergunta é: existe uma maneira mais limpa do que a que eu fiz?

bash
  • 3 respostas
  • 209 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