¿Cómo definir una función `bc` para uso posterior?

¿Cómo definir una función `bc` para uso posterior?

Siempre me ha parecido bcalgo misterioso e intrigante. Fue uno deelProgramas Unix originales. Y es un lenguaje de programación en sí mismo. Así que con mucho gusto aprovecho cualquier oportunidad que pueda encontrar para usarlo. Como bcno parece incluir una función factorial, quiero definir una así:

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

Pero... entonces no puedo reutilizar eso, ¿verdad? Me gustaría poder hacer algo como

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

Respuesta1

Guarde las definiciones de sus funciones en un archivo como factorial.bcy luego ejecute

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

Si desea que la función factorial se cargue siempre cuando ejecuta bc, le sugiero envolver el bcbinario con un script o función de shell (si un script o una función es mejordepende de cómo quieras usarlo).

Guión ( bc, para poner ~/bin)

#!/bin/sh

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

Función (para poner en el archivo rc de shell)

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

Desde elbcEspecificaciones POSIX:

Tomará información de cualquier archivo proporcionado y luego leerá de la entrada estándar.

Respuesta2

Ligeramente mejor que escribir una función contenedora de shell para bc, puede especificar los argumentos predeterminados de GNU bcen una variable de entorno. Así que coloque un archivo de configuración .bcrco algo así en su directorio de inicio y luego

export BC_ENV_ARGS="$HOME/.bcrc "

Desde elbcmanual de ÑU:

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.

información relacionada