Como definir uma função `bc` para uso posterior?

Como definir uma função `bc` para uso posterior?

Sempre achei bcmeio misterioso e intrigante. Foi um dosoprogramas Unix originais. E é uma linguagem de programação em si. Portanto, aproveito com prazer qualquer oportunidade que posso encontrar para usá-lo. Como bcnão parece incluir uma função fatorial, quero definir uma assim:

define fact(x) {
  if (x>1) {
    return (x * fact(x-1))
  }
  return (1)
}

Mas... não posso reutilizar isso, posso? Eu gostaria de poder fazer algo como

me@home$ bc <<< "1/fact(937)"

Responder1

Salve suas definições de função em um arquivo como factorial.bce execute

bc factorial.bc <<< '1/fact(937)'

Se você deseja que a função fatorial sempre carregue quando você executa bc, sugiro agrupar o bcbinário com um script ou função shell (se um script ou função é melhordepende de como você deseja usá-lo).

Script ( bc, para colocar ~/bin)

#!/bin/sh

/usr/bin/bc ~/factorial.bc << EOF
$*
EOF

Função (para colocar no arquivo shell rc)

bc () {
    command bc ~/factorial.bc << EOF
$*
EOF
}

DebcEspecificações POSIX:

Ele receberá a entrada de quaisquer arquivos fornecidos e, em seguida, lerá a entrada padrão.

Responder2

Um pouco melhor do que escrever uma função shell wrapper para bc, você pode especificar os argumentos padrão para GNU bcem uma variável de ambiente. Então coloque um arquivo de configuração .bcrcou algo assim em seu diretório inicial e então

export BC_ENV_ARGS="$HOME/.bcrc "

DebcManual GNU:

BC_ENV_ARGS  
    This is another mechanism to get arguments to bc. The format is the same
    as the command line arguments. These arguments are processed first, so
    any files listed in the environment arguments are processed before any
    command line argument files. This allows the user to set up "standard"
    options and files to be processed at every invocation of bc. The files
    in the environment variables would typically contain function
    definitions for functions the user wants defined every time bc is run.

informação relacionada