Portando a data do Linux parsing para o FreeBSD

2

Eu tenho data neste formato: date -d $datum +"%Y-%m-%d" e no Linux funcionou bem, mas no FreeBSD diz isso:

ERROR wrong format
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]

qual é a resposta para isso:

date -d $datum +"%Y-%m-%d" >/dev/null 2>&1 || echo "ERROR wrong format" 

Mas imprime um erro e continua com o código e parece que corretamente. O que devo fazer, para que não seja impresso erro e, se houver algum erro, o programa sairá?

    
por applenic 28.03.2015 / 14:54

2 respostas

0

A versão GNU de date que você está acostumado no Linux suporta muito mais formato de data do que a versão de date na maioria das outras variantes Unix. Ele também tem muitas opções que não estão presentes em outras variantes do Unix. O único uso padrão de date é exibir a data atual de acordo com um formato especificado com um argumento +… (e também uma maneira de o administrador do sistema definir a data do sistema) e a opção -u para especificar o UTC em vez do fuso horário local.

Em FreeBSD , você pode usar o utilitário date para converter entre formatos de data com a opção -f , por exemplo date -f %s "$datum" +%Y-%m-%d para converter uma data expressa em segundos da época para um formato legível por humanos.

Se você quiser uma extravagante análise de data, você pode instalar o pacote coreutils , que contém a data GNU. Ou você pode usar o módulo Date::Parse em Perl ou dateutil em Python.

Para fazer com que um script de shell pare na maioria dos erros, adicione set -e logo abaixo da linha #! .

Se você quiser exibir um erro explicitamente, cabe a você sair do script com um status de erro. Imprimir erros para stderr, não para stdout.

date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1 || {
  echo "ERROR wrong format" >&2
  exit 1
}

ou

if ! date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1; then
  echo "ERROR wrong format" >&2
  exit 1
fi
    
por 28.03.2015 / 21:15
1

Eu não tenho uma caixa de bsd para testar, mas parece que você precisa usar este formulário:

date -f "some format" "$datum" "+%Y-%m-%d"

e você tem que especificar o formato do dado de entrada para que possa ser analisado.

    
por 28.03.2015 / 14:58