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

8

Eu sempre achei bcmeio misterioso e intrigante. Foi um dos os programas Unix originais. E é uma linguagem de programação em si mesma. Então, com prazer, aproveito qualquer chance que posso encontrar para usá-lo.

Como bc nã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 ... então não posso reutilizar isso, posso?

Eu gostaria de poder fazer algo como

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

Respostas:

11

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

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

Se você deseja que a função fatorial seja sempre carregada ao executar bc, sugiro agrupar o bcbinário com um script ou função shell ( se um script ou função é melhor depende de como você deseja usá-lo).

Script ( bc, para inserir ~/bin)

#!/bin/sh

bc ~/factorial.bc << EOF
$@
EOF

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

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

Nas bcespecificações POSIX :

Ele deve receber a entrada de qualquer arquivo fornecido e, em seguida, ler a entrada padrão.

jw013
fonte
Talvez você possa chamar o arquivo .bcrc? Você pode colocar várias definições no mesmo arquivo?
Bernhard
Sim, você pode colocar qualquer sintaxe bc válida no arquivo. O que você chama de arquivo e onde você o coloca é com você.
jw013