¿Alguna calculadora de línea de comandos para Ubuntu?

119

Estoy buscando una calculadora que pueda hacer cálculos en el terminal sin otros prefijos y sufijos adicionales.

Por ejemplo: si escribí algo como 10000-9000 en la terminal, la respuesta debería salir como 1000.

Una vez más, digo, solo necesito una calculadora rápida en la terminal, sin ningún carácter agregado. Sé que si me cambio a Python, puede hacer eso, pero no lo quiero de esa manera.

rɑːdʒɑ
fuente
1
¿Quizás packages.ubuntu.com/saucy/apcalc ?
despertar el
2
Que podría ser posible piratear algo así con una especie de pre-gancho; pero eso en sí mismo solo se puede hacer de una manera realmente fea y hostil . No, creo que no es una buena idea. Bash en su conjunto se entiende como un lenguaje de script de E / S simple, todo lo que hace aparte de eso es más o menos ad-hoc y no funciona realmente bien. Python, por otro lado (o incluso, por ejemplo, Haskell) es un lenguaje de programación moderno y multipropósito con una gran sintaxis. Por lo tanto, sería estúpido no usarlo.
Leftaroundabout
3
En el mismo sentido, también podría hacer algo con el command_not_foundgancho e intentar alimentar el comando a bc/ calc/ lo que sea si se parece vagamente a las matemáticas. Sin embargo, todavía se siente un poco sucio.
cronitis
1
Espera, ¿qué quieres decir exactamente con "cambiar a" Python? y "sin prefijos adicionales"? ¿Estás diciendo que quieres poder calcular las cosas en el indicador sin ejecutar un comando ?
Random832

Respuestas:

78

Aritmética Bash

Otra posible solución es agregar una función simple para la aritmética integrada de Bash. Pon esto en tu .bashrcarchivo para probar:

=() {
    echo "$(($@))"
}

Así que ahora, ya no necesitas $((...))más, solo lo =que parece bastante natural.

Reemplazo

Otra cosa si quieres ser aún más rápido: puedes reemplazarlo pcon +y xcon *. Esto funcionará para eso:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    echo "$(($calc))"
}

= 5 x 5  # Returns 25
= 50p25  # Returns 75

Ahora ya ni siquiera lo necesitas Shift, lo único está delante de la aritmética.

Salida hexadecimal

La salida se puede mostrar en decimal y hexadecimal, si así se desea. ( Nota : el uso de la xsustitución entrará en conflicto con la 0x...sintaxis hexadecimal)

=() {
    local answer="$(($@))"
    printf '%d (%#x)\n' "$answer" "$answer"
}

Ejemplo:

$ = 16 + 0x10
272 (0x110)

$ = 16**3 + 16**4
69632 (0x11000)

Utilizando bc

Si desea cálculos un poco más avanzados, puede canalizarlo bcasí:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    bc -l <<<"scale=10;$calc"
}

= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)'  # Returns pi (3.1415926532)

Las funciones proporcionadas por bcson las siguientes (y se pueden encontrar en man bc):

sqrt ( expression )
       The value of the sqrt function is the square root of the expression.  
       If the expression is negative, a run time error is generated.

s (x)  The sine of x, x is in radians.

c (x)  The cosine of x, x is in radians.

a (x)  The arctangent of x, arctangent returns radians.

l (x)  The natural logarithm of x.

e (x)  The exponential function of raising e to the value x.

j (n,x)
       The Bessel function of integer order n of x.

También es compatible con if, for, whiley variables como un lenguaje de programación, aunque si puede ser mejor para escribir en un archivo si quería eso.

Tenga en cuenta que sustituirá py xen nombres de funciones / variables. Puede ser mejor simplemente eliminar los reemplazos.

Utilizando gcalccmd

También puede hacer que la función llame gcalccmd(desde gnome-calculator) así:

=() {
    local IFS=' '
    local calc="$*"
    # Uncomment the below for (p → +) and (x → *)
    #calc="${calc//p/+}"
    #calc="${calc//x/*}"
    printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}

= 'sqrt(2)' # Returns 1.4142135623
= '4^4'     # Returns 256

Las funciones disponibles parecen ser (tomadas directamente del código fuente ), ==denotan funciones equivalentes:

ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()
kiri
fuente
1
Gracias, ¿puedes agregar más apoyo con los cálculos científicos?
rɑːdʒɑ
2
@rajagenupula Vea mis ediciones arriba
kiri
Perdón por esta respuesta tardía, pero el comando que has dado gcalccmdno funciona bastante bien. Error 3Probablemente se deba a ese espacio en blanco perdido. Sin embargo, este ligeramente modificado funcionó perfectamente para mí:echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
udiboy1209
¡Construí un cálculo científico usando R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Morteza Milani
Hola y gracias Eso es muy bonito. Por cierto, su sustitución de 'x' hace que falle para la entrada hexadecimal, que de lo contrario funciona bien. Hablando de eso, ¿puedo tener la respuesta en 'hex' también? p.ej. = 2 + 0x20 34 (0x22)
FractalSpace
93

Puede hacer aritmética de enteros simples de forma nativa en bash utilizando la ((...))sintaxis, por ejemplo

$ echo $((10000-9000))
1000

También está la bccalculadora, que puede aceptar expresiones aritméticas en la entrada estándar

$ echo "10000-9000" | bc
1000

El bcprograma también puede hacer aritmética de coma flotante

$ echo "scale = 3; 0.1-0.09" | bc
.01
conductor de acero
fuente
11
Esto es probablemente lo más cerca que puedes estar. Para reducir el tipeo adicional (aunque no eliminarlo por completo) puede poner una función en su ~ / .bashrc: calc()NL {NL echo "$@" | bcNL }donde NL es una nueva línea. Luego puede escribir calc 1234 + 768(impresiones 2002), o cualquier otra fórmula que bcpueda interpretar. Por supuesto, puede usar cualquier nombre de función, solo pensé que calcencajaba muy bien con lo que esto hace.
un CVn
44
una vez que python es mejor que echo todo el tiempo. mi opinión.
rɑːdʒɑ
66
También puede usar bc de forma interactiva, a menos que necesite el eco por alguna otra razón: simplemente ejecute bc y escriba su expresión. Escriba Ctrl-D en su propia línea para salir.
Inútil
si hiciste una expresión automática con la ayuda de un alias o algo más, sería genial.
rɑːdʒɑ
3
No es necesario echo:bc <<< "2*2"
Bernhard
90

Puedes usar calc. No se instala de manera predeterminada, pero puede instalarlo rápidamente con el siguiente comando:

sudo apt-get install apcalc

Después de haberlo instalado, puede hacer cualquier cálculo que desee:

$ calc 5+2
    7
$ calc 5-2
    3
$ calc 5*2          
    10
$ calc 5/2
    2.5
$ calc 5^2
    25
$ calc 'sqrt(2)' 
    1.4142135623730950488
$ calc 'sin(2)'
    0.9092974268256816954
$ calc 'cos(2)'
    -0.416146836547142387
$ calc 'log(2)'
    ~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
    ~0.81633199125847958126
$ # and so on...

Para obtener más información, vea su página de manual

Radu Rădeanu
fuente
2
Gracias por responder, veo que la respuesta tiene su propio significado. Me gusta un poco más sobre todos esos cálculos de funciones trigonométricas. cualquier manual o alguna página sobre qué más puede hacer puede mejorar mucho su respuesta. :)
r 18dʒɑ
@rajagenupula man calcy lo calc helpdice todo.
Radu Rădeanu
2
Mi intención es que, si alguien lo mira, debe ser claro y rápido. gracias.
rɑːdʒɑ
1
En realidad, se utiliza calc help builtinpara ver una lista de funciones compatibles comosin()
Penghe Geng
Da más decimales, por lo que es más adecuado para mis propósitos que la aritmética de bash incorporada. Gracias.
Mrmfldmn
30

Desafortunadamente, no hay una forma "más fácil" de hacer esto. La interfaz interactiva de Python en la línea de comandos es la más adecuada para lo que necesita, porque a diferencia de apcalc\, pythonse incluye en Ubuntu. No estoy seguro de si bctodavía se incluye, sin embargo, Python es el favorito para estas cosas.

Simplemente puede ejecutar la pythoninterfaz interactiva en la línea de comando, y luego hacer las matemáticas de esa manera. Puedes usar eso como tu calculadora.

Para hacer eso, abre la terminal, escribe python, luego presiona el Enterbotón.

Luego, en el indicador de Python que aparece, puede escribir sus matemáticas. Por ejemplo 10000 - 9000,. La siguiente salida de línea es el resultado.


Sin embargo, si quieres decir algo en lo que solo cargas la terminal y puedes hacer esto ...

$ 10000 - 9000
1000
PS

... entonces no, no hay forma de hacer esto solo en la terminal sin otra cosa, porque Bash no maneja argumentos numéricos como ese.

Thomas Ward
fuente
1
Mencioné
1
@rajagenupula actualizado, también incluyó las cosas que mencioné en el chat.
Thomas Ward
bc ya no está incluido?
Random832
1
Por otro lado, ipythones bastante más útil que el shell estándar de Python cuando se trata de hacer cálculos y cosas por el estilo.
Naftuli Kay
bc se incluye por defecto (al menos en 16.04)
TJ Ellis
23

Te aconsejo que crees una función simple para cálculos básicos de Python. Algo así en tu .bashrc:

calc() {
    python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 5 + 5
# Returns 10

result="$(calc 5+5)"
# Stores the result into a variable

Si desea hacer matemáticas más avanzadas, puede usar la siguiente que importa todas las mathfunciones del módulo. (ver aquí para más información)

calc() {
    python3 -c 'from math import *; import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 'sqrt(2)'  # Needs quotes because (...) is special in Bash
# Returns 1.4142135623730951

result="$(calc 'sqrt(2)')"
# Stores the result into a variable

(Nota: debido a que Python es un lenguaje de programación, algunas cosas pueden parecer extrañas, por ejemplo, **para potencias y %para módulos)

Alternativamente, puede crear un script de Python calc,

#!/usr/bin/python3
from math import *
import sys
print(eval(' '.join(sys.argv[1:])))

colóquelo en un directorio incluido en la PATHvariable y establezca su indicador ejecutable para obtener el mismo calccomando que el anterior (no es necesario crear una función Bash para ejecutar un script Python).

Si desea un método en puro Bash, use la respuesta de steeldriver. Esta respuesta solo es realmente beneficiosa si necesita las funciones más avanzadas (es decir, de math), ya que Python es relativamente lento en comparación con Bash.


No estoy seguro si esto rompe su "cambio a Python, puede hacer eso y no lo quiero de esa manera". tenga en cuenta, pero no es necesario que ingrese la solicitud interactiva y el resultado es accesible en Bash, por lo que esta respuesta parece válida (al menos para mí).

kiri
fuente
cada vez que todos tienen que hacerlo significa que no es tan fácil y flexible. Gracias. ¿Alguna mejora puede hacer que parezca más simple y claro? Amaría eso.
rɑːdʒɑ
1
@rajagenupula Puede poner esto en una función en su .bashrc (tal vez con un nombre más corto: c, ?o +?) por lo que tendrá que cada terminal se abre.
kiri
1
Cuidado: con Python 3 esto funciona muy bien, pero si quieres usar Python 2 tendrás que editar el fragmento a: de lo python2 -c "from __future__ import division; from math import *; print($*)"contrario, siempre hará una división entera, por ejemplo, para calc 5/2obtener en 2lugar de 2.5. Consulte aquí para referencia: stackoverflow.com/a/183870/202504
jmiserez
La solución de Python en realidad puede ser mejor que apcalc, ya que puede importar bibliotecas adicionales y admite literal piy e. Siento que poner esto como un script separado es más flexible y portátil. Aquí hay una idea
Penghe Geng
21

Use el paquete gcalccmdfrom gnome-calculator(> = 13.04) o gcalctool(<13.04). Creo que el paquete está instalado por defecto

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
Pedernal
fuente
El mejor hasta ahora ... No es necesario hacer cosas adicionales y también está instalado por defecto ... man gcalccmddice: una calculadora de consola . Simplemente, es exactamente lo que OP quiere ... :)
Saurav Kumar
Eso es genial, similar a las calculadoras bc, python, ocatve. Gracias.
r 18dʒɑ
Desde gcalccmd es bastante difícil de escribir, es una buena idea añadir alias para que en ./bash_aliasesigual alias calc='gcalccmd'o si desea realizar cálculos de una sola vez (con respuesta instantánea), se puede añadir alias calc='gnome-calculator -s'- el uso de este último: calc 2000/1300o calc 2+3. En ese caso, no hay necesidad de salir de la calculadora, solo le da una respuesta y no necesita escribir quit.
Rafal
10

Aquí hay un script de shell rápido para esto:

#!/bin/bash
echo "$@" | bc

Guarde esto como "c", luego póngalo en algún lugar de su ruta (como / bin), luego márquelo como ejecutable.

# nano /bin/c
# chmod +x /bin/c

A partir de ahora, puede ejecutar cálculos en el terminal de esta manera:

$ c 10000-9000
1000
usuario530873
fuente
Eres excelente, agregar solo una letra antes del cálculo significa que es una idea genial. Esto es excelente si necesito 2 o 3 cálculos. Puedo ir a Python o algún otro por más tiempo pero más corto elijo esto. Gracias por detenerte.
rɑːdʒɑ
2
Yo te aconsejo que utiliza echo "$@" | bcen su lugar para que pueda dejar espacios en los cálculos de forma más natural
kiri
¿Qué tal usar en =lugar de cpara el nombre de este comando? Bash realmente te permite usar esto como el nombre de una función.
Kaz
1
Puede poner programas en ~/bin(su directorio de inicio bin) y asegurarse de que /home/yourname/binesté en su PATH.
Kaz
@ minerz029 Buen pensamiento. He editado mi respuesta en consecuencia.
user530873
8

Aquí hay una modificación de la parte apropiada de /etc/bash.bashrc(en Ubuntu 10.04) que modificará el command_not_foundcontrolador para ejecutar el evaluador de expresiones del shell si el primer carácter del comando desconocido es un número o -o +.

Podrá hacer cualquier cálculo aritmético de esta manera; consulte http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic para obtener una lista de operadores aritméticos.

Tenga en cuenta que si la expresión que desea evaluar contiene a *, deberá citar *con \o entre comillas, ya que el shell realizará la expansión del nombre de archivo antes de decidir qué comando ejecutar. Lo mismo para otros operadores como >>.

Pon esto en tu ~/.bashrc, luego escribe . ~/.bashrcy pruébalo.

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
    function command_not_found_handle {
        if [[ $1 == [0-9+-]* ]]; then
           echo $(( $@ ))
        elif [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        elif [ -x /usr/share/command-not-found ]; then
           /usr/bin/python /usr/share/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

Ejemplo de salida: (estoy escribiendo cta, un error tipográfico, solo para probar que nuestro nuevo controlador command_not_found aún intentará buscar comandos desconocidos).

mp@ubuntu:~$ cta
No command 'cta' found, did you mean:
 Command 'cda' from package 'xmcd' (universe)
 Command 'cat' from package 'coreutils' (main)
cta: command not found
mp@ubuntu:~$ 9000-1000
8000
Mark Plotnick
fuente
¿Hay alguna manera de que podamos agregar más soporte para los cálculos?
rɑːdʒɑ
1
Puede tomar la línea que dice echo $(( $@ ))y cambiarla, en su lugar, ejecutar uno de los programas de calculadora más avanzados que otros respondedores han mencionado que toman sus argumentos en la línea de comando.
Mark Plotnick
8

Otra solución que no he visto mencionada aquí es Qalculate (qalc) .

sudo apt-get install qalc

para la versión CLI,

sudo apt-get install qalculate-gtk

para la GUI

Tiene un montón de características como:

  • soporte para unidades : ej.20 m / s * 12 h = 864 kilom
  • incorporada constantes tales como pi, e, c,avogadro
  • muchos incorporadas funciones : por ejemplo sin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • conversión de unidades, por ejemplo:

> 120 in
120 * inch = 120 in
> convert cm
120 in = 304.8 centim

  • cálculo simbólico , p. ej.(x + y)^2 = x^2 + 2xy + y^2
  • integración, por ejemplo integrate 3*x^2 = x^3,diff sin(x), pi
  • ayuda incorporada, por ejemplo help convert,help integrate
  • tabulación de comandos
  • todo está traducido, por ejemplo, mi sistema está en holandés, por lo que puedo escribir ambos factorial(5)y faculteit(5).
  • y más...

Dices que quieres usarlo sin prefijos, bueno ... puedes usarlo con un prefijo:

$ qalc 5 ft + 3 cm
(5 * foot) + (3 * centim) = 1.554 m

así como ejecutarlo como respuesta.

JW
fuente
7

dc! Es parte de coreutils, por lo que está instalado en OS X, Ubuntu y prácticamente TODO lo demás. Es una calculadora RPN, así que si no te gustan, no es para ti.

Los comandos muy básicos son los siguientes (la página de manual tiene toda la sintaxis que no incluí. Exponenciación, ¿alguien?)

Solo necesitas espacios entre números. Se ignoran en todos los demás casos.

Escribir un número lo empuja a la parte superior de la pila.

+ Adds top 2 items in stack, then pushes result to stack (`2 4 +p` outputs 6)
- Subtracts top 2 items in stack, then pushes result to stack (`4 2 -p` outputs 2)
* Multiplies top 2 items in stack, then pushes result to stack (`6 5 *p` outputs 30)
/ Divides top 2 items in stack, then pushes result to stack (`54 7 /p` outputs 8)
p Print top item in stack, without destroying it
c Clear stack
r Swap top 2 items on stack
d Duplicate top item on stack
k Pops top item off stack, using it to determine precision (so 10 k would print 10 numbers after the decimal point). Default is 0, so it won't do floating point math by default.
n Pops top value off stack, then sends to stdout without a trailing newline
f Dump stack. Useful for finding what something does
Otro usuario
fuente
Acabo de notar que esto no responde la pregunta (ni ninguna otra respuesta). La pregunta es cómo NO tener nada delante de la ecuación (ni detrás), y simplemente escriba say, 42 * 5en un terminal, y haga que salga la respuesta
Yet Another User
2
La mayoría de las respuestas no aplican. Escribir 1+1en una terminal casi nunca funcionará. Entonces su respuesta está bien
kiri
@YetAnotherUser Creo que la única forma es piratear el comando no encontrado (si está instalado) o hacer algo sucio en el bashrc ...
Braiam
5

Yo uso Octave para este tipo de cosas: http://www.gnu.org/software/octave/

Es más o menos un clon de matlab (disculpas si se trata de una simplificación excesiva) que se puede usar en el terminal escribiendo octava. Instalar sudo apt-get install octave

No es exactamente lo que quieres, pero pensé que lo agregaría como una alternativa a Python.

Ejemplo de uso:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
Andy T
fuente
Sugerir una forma diferente de lograr el objetivo está bien en una respuesta, pero debe proporcionar más información sobre cómo el OP usaría Octave para satisfacer las necesidades indicadas y por qué es una buena alternativa.
chaskes
2
+1, Octave, matlab, scilab, python, todos son similares, pero tengo que instalar la octava, pero python está preinstalado. así que me dirijo a python por defecto. Gracias.
rɑːdʒɑ
De todo lo que probé (¡y probé muchos!), la octava es la única que devuelve un error de sintaxis distinto de 0. ¡gracias!
Acuario Power
5

Me gusta mucho wcalc. Es una calculadora científica de línea de comando. Fácil de encontrar en el Centro de software de Ubuntu, o simplemente use apt-get.

sudo apt-get install wcalc

Acepta argumentos de línea de comando y tiene el modo "shell":

# simple operation
$ wcalc 2+2
 = 4
# Quoting is necessary to prevent shell from evaluating parenthesis
$ wcalc "(2+2)*10"                                                                                    
 = 40
$ wcalc "sqrt(25)"                                                                                    
~= 5
# in shell mode you can evaluate multiple commands repeatedly
$ wcalc
Enter an expression to evaluate, q to quit, or ? for help:
-> 12*20+1
 = 241
-> sin(90)
 = 1
-> sin(pi/2)
 = 0.0274121

Y si alguien está en ingeniería, como yo, podría utilizar GNU Octave. Puede hacer todo tipo de cosas, graficar, resolver ecuaciones simultáneas. Además, es una alternativa gratuita a Matlab

Sergiy Kolodyazhnyy
fuente
... combinar eso con @ minerz029 es bastante bueno: coloque esto en sus ~ / .bash_aliases:=() { wcalc "$@" }
Frank Nocke
4

manera simple es llamar a python.

Ejemplo:

>  python -c 'print 10000-9000'
user2327875
fuente
¿Puedes mencionar algo con cálculos científicos?
rɑːdʒɑ
1
¿Quieres algo como esto? python -c 'import math;print math.log(2)'
user1251007
3

Lo que he encontrado es que no puedo confiar en expr, bc o en las opciones integradas de Shell. Por lo tanto, utilicé Perl que normalmente se instalaría en * linux distro's

perl -le 'printf "%.0f", eval"@ARGV"' "($VAL2-$VAL1)"

El cálculo anterior restará $ VAL1 de $ VAL2 e imprimirá sin decimales (0f)

El beneficio de usar Perl es (detalles de Pros y contras listados aquí )

  • Mejor captura de errores (dividir por 0 no detendrá el cálculo)
  • Puede proporcionar fórmulas en un archivo de configuración. No es necesario escapar usando expresiones regulares complejas
diario
fuente
pero cada vez que ese comando significa un pequeño problema de cualquier manera. ¿hay alguna calculadora basada en perl para usar en la terminal?
rɑːdʒɑ
3

Puede agregar la siguiente función a su archivo .bashrc:

function = {
  echo "$@" | bc -l
}

Tenga en cuenta que la -lbandera es muy importante. Sin ella, el uso de bcda 5 / 2 = 2.

Como se mencionó anteriormente, los cálculos se pueden hacer usando el =signo delante de la fórmula.

vdm
fuente
3

También puede usar awk para hacer algunos cálculos aritméticos en la terminal,

echo 10000 9000 | awk '{print $1-$2}'
1000
echo 10000 9000 | awk '{print $1+$2}'
19000
echo 10000 9000 | awk '{print $1/$2}'
1.11111
echo 10000 9000 | awk '{print $1*$2}'
90000000
Avinash Raj
fuente
¡cool, awk (como octava) también devuelve un no 0 en el error de sintaxis thx!
Acuario Power
2

use el comando "bc" y luego puede hacer el cálculo

ejemplo

[root@vaibhav ~]# bc

----------these lines will genrate automaicaly---------------

right 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

---------------enter your calculation here---------------------------------------


10+2   

12

Para usar bcsin la nota de garantía escriba en el terminalbc -q

ejemplo

[root@vaibhav ~]# bc -q
10+2
12
Vaibhav Jain
fuente
bc ya está explicado e incluido.
Braiam
2

Puede usar bind y bash C-ay C-epara controlar la salida. Por ejemplo, ejecute esto en su shell:

bind '"\C-j": "\C-aecho $(( \C-e )) \C-m"'

Ahora escriba cualquier operación aritmética como 10 + 15 y presione Ctrl+ J:

$ echo $(( 10 + 15 )) 
25

Obtendrás esto. Ahora, ¿cómo se hace?

  • bind Este comando cambia el enlace de su bash, como las teclas de acceso directo.
  • \C-j este es el bash equivalente a Ctrl + J, esta es la combinación de teclas que nos gustaría agregar a nuestro comando.
  • \C-a Esto nos lleva al inicio de la línea.
  • echo $((Esto escribe echo $((al principio.
  • \C-e nos lleva al final de la línea
  • )) cierra nuestro paréntesis anterior
  • \C-m Este es el equivalente a la tecla de retorno.

Puede escribir esto en su ~/.inputrcarchivo:

"\C-j": "\C-aecho $(( \C-e )) \C-m"

¡Por supuesto, las otras respuestas también son válidas! Solo retoqué un poco:

  • antes de Cristo: "\C-j": "\C-aecho " \C-e " | bc \C-m"
  • apcalc: "\C-j": "\C-acacl \C-m"
  • pitón: "\C-j": "\C-apython3 -c "print( \C-e )" \C-m"
  • ¿cualquier otro?

Puede cambiar Ctrl + J a lo que quiera, pero recuerde, intente no cambiarlo por algo que ya tenga un enlace;).

Recurso:

Braiam
fuente
Ctrl + J ya tiene un enlace, envía la línea (como Enter) Sin embargo, esta es una respuesta bastante inteligente;)
kiri
2

En el pasado, he usado wcalcun pequeño programa llamado eque es prácticamente imposible buscar en Google. Ahora uso un script de Python para hacer esto, que usa algunas características ecomo los corchetes. wcalcsigue siendo bueno porque puede hacer precisión arbitraria y conversión de unidades, pero casi nunca uso esas características.

#!/usr/bin/env python3

"""
This is a very simple command line calculator.  It reads in all
arguments as a single string and runs eval() on them.  The math module
is imported so you have access to all of that.  If run with no
arguments, it allows you to input a single line expression.  In the
case of command line args, square brackets are replaced with round
parentheses, because many shells interpret round parentheses if they
are not quoted.
"""

import sys, numbers
import cmath, math

args = sys.argv[1:]

if len(args) < 1:
    expr = input()
else:
    expr = " ".join(args[:])
    expr = expr.replace("[", "(").replace("]", ")")

def log2(x):
    """Return the base-2 logarithm of x."""
    return cmath.log(x, 2)

# the smallest number such that 1+eps != 1
# (this is approximate)
epsilon = sys.float_info.epsilon

env = math.__dict__
env.update(cmath.__dict__)
env = {k:v for k,v in env.items() if not k.startswith("__")}
env["eps"] = epsilon
env["log2"] = log2
env["inf"] = float("inf")
env["nan"] = float("nan")

res = eval(expr, env)
# throw away small imaginary parts, they're probably just due to imprecision
if (isinstance(res, numbers.Number)
    and res != 0
    and abs(res.imag)/abs(res) < 10*epsilon):
    res = res.real

print(str(res).replace("(", "[").replace(")", "]"))

Aquí se explica cómo usarlo (suponiendo que el guión se haya guardado como ey puesto en algún lugar del $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
jpkotta
fuente
un ejemplo hará que esto se vea más claro. Gracias.
rɑːdʒɑ
0

Hay una forma de un solo paso para lograr exactamente lo que quieres. Todo lo que necesita hacer es configurar shellsu cuenta /bin/bc.

bizzyunderscore
fuente
3
¿Podrías por favor elaborar? Pressume OP no sabe cómo cambiar el shell.
Braiam
0

También puede usar printf shell incorporado para hacer cálculos aritméticos en la terminal.

printf `expr $num1 + $num2`   # num1,num2 are  variables which stores numbers as values.

Ejemplo:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
Avinash Raj
fuente
3
De esta forma estás usando expr (que no está integrado) para calcular el resultado, printf es redundante aquí
Javier López
0

Puede usar el intérprete de python para el cálculo. Aquí hay un tutorial sobre cómo hacerlo .

Python 2 y python 3 están instalados en Ubuntu por defecto.

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+2
4
>>> 3*5
15
Ninguno
fuente
0

Crear una calculadora de terminal

Ponga lo siguiente en su archivo .bashrc

function calc
{
 echo "${1}"|bc -l;
}

O ejecútelo en el indicador de comandos de la shell. Ahora "calc" del shell funcionará de la siguiente manera:

$ calc 3+45
   48

Todas las funciones con un "(" o ")" deben estar entre comillas.

Vishnu NK
fuente