В случае Redis он также выдает предупреждение, предлагающее отключить THP. Но, как отмечено в отчете об ошибке , во многих дистрибутивах /etc/rc.local
выполняется после служб и не влияет на них, пока они не перезапустятся. Также обратите внимание, что в виртуализированных средах (например, Digitalocean) вы не можете управлять настройками GRUB.
В этом случае решением является использование специального сценария init для отключения прозрачных огромных страниц , как эта страница предлагает, с помощью настроек X-Start- До
. Например, сценарий Debian init для Redis:
#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-thp
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: redis-server
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable THP
# Description: disables Transparent Huge Pages (THP) on boot
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
else
return 0
fi
;;
esac
Вы запускаете функцию addition_example
без аргументов. Следовательно, переменные $1
и $2
пусты, и на самом деле вы выполняете просто result = $((+))
. Это дает именно ту ошибку, которую вы упомянули:
$ result = $((+))
bash: +: syntax error: operand expected (error token is "+")
Когда вы запускаете source script_name.sh 20 20
, оболочка будет источником script_name.sh
, передавая его 20
и 20
в качестве аргументов. Однако script_name.sh
на самом деле не содержит никаких команд, в нем есть только объявление функции. Поэтому аргументы игнорируются. Затем в следующей команде вы запускаете addition_example
, но без аргументов, поэтому вы получаете ошибку, описанную выше.
Кроме того, у вас есть синтаксическая ошибка. У вас не может быть пробелов вокруг оператора присваивания(=
)в сценариях оболочки. Вы должны изменить свой скрипт на:
function addition_example(){
result=$(($1+$2))
echo "Addition of the supplied arguments = $result"
}
А затем запустить функцию с нужными аргументами:
$ source script_name.sh; addition_example 20 20
Addition of the supplied arguments = 40
У вас есть несколько незначительных проблем с кодом.
Попробуйте это:
#!/bin/bash
function addition_example(){
local num1=$1
local num2=$2
local result=$((num1+num2))
echo "Addition of the supplied arguments = $result"
}
addition_example "$1" "$2"
=
при назначении переменной с помощью bash echo
должен быть заключен в кавычки, любая переменная должна быть заключена в кавычки.