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 / ubuntu / Perguntas / 1053023
Accepted
Socrates
Socrates
Asked: 2018-07-08 08:10:54 +0800 CST2018-07-08 08:10:54 +0800 CST 2018-07-08 08:10:54 +0800 CST

Medir cada comando dentro de um arquivo bash?

  • 772

Existe uma maneira de medir o tempo gasto em cada comando dentro de um arquivo bash? Portanto, coloque tempo antes de cada comando. A quantidade de comandos é desconhecida no momento, pois pretendo usar essa medida de tempo para futuros scripts bash também. E também vale a pena mencionar que pretendo executar apenas scripts bash simples com command1, command2, command3, ... etc. Portanto, nenhum script de lógica superior complexo.

Digamos que eu tenha um arquivo bash semelhante a este:

#!/bin/bash

mv /path/to/file /other/path/
cd /other/path/
tar -xzf /other/path/file

Existe uma maneira de obter alguma saída semelhante a esta?

 6.553s   mv /path/to/file /other/path/
 0.057s   cd /other/path/
19.088s   tar -xzf /other/path/file

Eu sei que com timeposso obter o tempo gasto de um único comando. Mas estou procurando uma solução para medir o tempo de cada comando em si.

command-line bash time
  • 2 2 respostas
  • 180 Views

2 respostas

  • Voted
  1. Best Answer
    sudodus
    2018-07-08T08:45:44+08:002018-07-08T08:45:44+08:00

    Você pode usar /usr/bin/timecom a opção -fcomo no exemplo a seguir. Preceda cada comando em seu shellscript com/usr/bin/time -f "%E %C"

    $ /usr/bin/time -f "%E %C" sleep 2.34
    0:02.34 sleep 2.34
    

    Consulte man timepara mais detalhes.

    Exemplo:

    Fiz um pequeno script, que pode funcionar para modificar um shellscript simples/usr/bin/time , identificando comandos, que podem ser testados com . Vamos usar o nome time2script.

    #!/bin/bash
    
    string='/usr/bin/time -f "%E %C"'
    
    while IFS= read -r line
    do
     cmd=$(<<< "$line" sed -e 's/ *//'|cut -d ' ' -f1)
     command=$(which "$cmd")
     if [ "$command" != "" ]
     then
      printf '%s %s\n' "$string" "$line"
     else
      printf '%s\n' "$line"
     fi
    done < "$1"
    

    Usando time2scriptno exemplo na pergunta editada:

    $ ./time2script socrates1
    #!/bin/bash
    
    /usr/bin/time -f "%E %C" mv /path/to/file /other/path/
    cd /other/path/
    /usr/bin/time -f "%E %C" tar -xzf /other/path/file
    

    Redirect para criar um shellscript modificado,

    ./time2script socrates1 > socrates1-timing
    
    • 6
  2. wjandrea
    2018-07-08T10:30:02+08:002018-07-08T10:30:02+08:00

    Esta é a abordagem ingênua. Tem alguns pontos de falha*, então não necessariamente recomendo o uso, só queria mencionar.

    #!/bin/bash
    # Time each command in another Bash script.
    
    script="$1"
    
    # Skip blank lines and comments.
    grep -vE "^\s*($|#)" "$script" |
        while IFS= read -r line
    do
        echo "$line"
        time eval "$line"
    done
    

    Exemplo de script foo.sh:

    #/bin/bash
    true
    sleep 2.34
    

    Exemplo de execução:

    $ bash naive_timer.sh foo.sh
    true
    
    real    0m0.000s
    user    0m0.000s
    sys     0m0.000s
    sleep 2.34
    
    real    0m2.342s
    user    0m0.000s
    sys     0m0.000s
    

    * Por exemplo eval, vai engasgar com comandos multi-linha, como declarações de função, declarações de array, heredocs, até aspas multi-line. E os comandos que dependem do valor de $0podem não funcionar.

    • 2

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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