Сначала нужно ответить на вопрос, имеет ли смысл делать это в bash. Я очень сомневаюсь в этом; тем более, что, похоже, есть работающее решение. Где awk недоступен, а bash надежно доступен? Это домашнее задание...?
Но о том, как это можно сделать: Это не совсем математика с плавающей точкой, а математика с фиксированной точкой с точностью до двух цифр после точки. Так что просто сдвиньте числа на две цифры, посчитайте и снова сдвиньте результат:
shift_100_left () {
local input output beforep afterp
input="$1"
if [ "$input" = "${input//./_}" ]; then
# no . in it
output="${input}00"
else
beforep="${input%.*}"
afterp="${input#*.}"
output="${beforep}${afterp}"
fi
output=${output#0}
output=${output#0}
echo "$output"
}
shift_100_left 100
shift_100_left 123.75
shift_100_right () {
local input output beforep afterp length
input="$1"
length=${#input}
if [ 1 -eq "$length" ]; then
output=0.0${input}
elif [ 2 -eq "$length" ]; then
output=0.${input}
else
beforep="${input%??}"
afterp="${input:$((length-2))}"
output="${beforep}.${afterp}"
fi
echo "$output"
}
shift_100_right 1
shift_100_right 12375
Это утверждает, что все числа выглядят как xxx или yyy.yy, но никогда как, например, zzz.z.
Кажется, участник Парамвир Лихари добавил в репозиторий AUR подходящий исходный пакет, который вы можете собрать для совместимости с cairo и lua 5.3. Я сделал следующее на виртуальной машине qemu, установив arch linux, и смог запустить conky и увидеть кольца, нарисованные примерно через 10 секунд (после редактирования clock_rings.lua
только для 1 процессора для моей виртуальной машины ).
Я следовал стандартным инструкциям по сборке пакета, поэтому не буду их повторять. Единственное, что нужно знать, это какой исходный пакет (или )собирать, и это conky-cairo
. Его не удалось собрать, пока я сначала не построил зависимость tolua++_5.3
, а затем не удалось собрать, пока я не удалил необходимость в Xinerama. Без сомнения, есть способы построить и с этой опцией. Вот команды, которые я запускал
sudo pacman -S --needed base-devel
curl -O https://aur.archlinux.org/packages.gz
zgrep conky packages.gz
# choose conky-cairo
sudo pacman -S git
git clone https://aur.archlinux.org/conky-cairo.git
cd conky-cairo/
# read the file PKGBUILD for info and potential malware
makepkg -si PKGBUILD
# gave me error: target not found: tolua++_5.3
cd..
zgrep tolua packages.gz
# choose tolua++_5.3
git clone https://aur.archlinux.org/tolua++_5.3.git
cd tolua++_5.3
# read the file PKGBUILD for info and potential malware
makepkg -si PKGBUILD
cd..
cd conky-cairo
makepkg -s PKGBUILD
# gave me a CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
# Xinerama_LIBRARIES (ADVANCED)
# I removed the option with:
sed -i src/conky-1.10.7/CMakeCache.txt -e '/BUILD_XINERAMA/s/ON/OFF/'
makepkg -si PKGBUILD
cd../Conky/
conky -c rings
Он спросит вас, может ли он удалить какой-либо существующий пакет conky, чтобы установить новый.
Это результирующий скрипт:
sudo pacman -S --needed base-devel
sudo pacman -S git
git clone https://aur.archlinux.org/tolua++_5.3.git
(cd tolua++_5.3 && makepkg -si PKGBUILD)
git clone https://aur.archlinux.org/conky-cairo.git
(cd conky-cairo/ && makepkg -si PKGBUILD)
cd conky-cairo
sed -i src/conky-1.10.7/CMakeCache.txt -e '/BUILD_XINERAMA/s/ON/OFF/'
makepkg -si PKGBUILD
cd..