Как вы можете повторить ввод команды bc из bash?

Я пытаюсь создать псевдоним или функцию bash, которая может передавать текст на стандартный ввод команды unix bc.

Я сначала попытался:

alias semitone="echo \"scale=10; e(l(2.))\" | bc"

Какой bash анализирует нормально, но происходит сбой с ошибкой времени выполнения bc:

Runtime error (func=(main), adr=12): Function l not defined.

В тчш:

alias semitone 'echo "scale=10; e(l(2.)/12.)" | bc'

работает совершенно нормально и дает правильный вывод:

1.0594630943

Я также попытался использовать функцию bash:

semitone() { echo "scale=10; e(l(2.)/12.)" | bc ; }                                                                              

который возвращает ту же ошибку времени выполнения bc. Не уверен, как вывод становится манипулированным. Любое понимание?


person ctpenrose    schedule 06.03.2014    source источник
comment
Этот код также не работает вне функции или псевдонима. Попробуйте просто запустить echo "scale=10; e(l(2.)/12.)" | bc по запросу.   -  person Charles Duffy    schedule 06.03.2014


Ответы (1)


Для определения математических функций в bc необходимо указать параметр -l. В противном случае bc сообщит вам, что такие функции, как l, не определены.

Так что это не имеет ничего общего с псевдонимом. Я понятия не имею, как это работает с tcsh — это не работает в моей (ubuntu) системе. Хотя включая -l, даже через алиас -- как и в semitone -l -- отлично работает как с bash, так и с tcsh

person rici    schedule 06.03.2014
comment
Упс, моя ошибка. У меня был псевдоним bc как bc -l как в tcsh, так и в bash под linux. Я слишком долго не мог вспомнить функцию -l - person ctpenrose; 06.03.2014