Sempre achei bc
meio 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 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... 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.bc
e execute
bc factorial.bc <<< '1/fact(937)'
Se você deseja que a função fatorial sempre carregue quando você executa bc
, sugiro agrupar o bc
biná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
}
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 bc
em uma variável de ambiente. Então coloque um arquivo de configuração .bcrc
ou algo assim em seu diretório inicial e então
export BC_ENV_ARGS="$HOME/.bcrc "
Debc
Manual 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.