Вы можете сделать это, назначив каждый сценарий конкретному ядру с помощью набора задач
сначала вам нужно получить идентификатор процесса для вашего сценария с ps aux | grep
или используя pgrep -f
, затем передайте его в набор задач
следующим образом набор задач -pc 0 $ pid
, это назначит процесс ядру 1.
для получения дополнительной информации о наборе задач
http://linuxcommand.org/man_pages/taskset1.html
Похоже, вы пытаетесь выполнить передачу по ссылке функцию типа.
Они не очень подходят для сценариев bash
. Мы можем подделать его с помощью команды eval
, но это имеет много рискованного поведения (потенциальная оценка команд, встроенных в строки), и поэтому не рекомендуется.
В этом примере код будет выглядеть примерно так:
function check_cases {
case $2 in
r) eval $1=\"\$$1 Read\" ;;
w) eval $1=\"\$$1 Write\" ;;
x) eval $1=\"\$$1 Execution\" ;;
esac
}
check_cases var r
check_cases var w
check_cases var x
echo $var
Вместо этого обычно лучше использовать семантику передачи по значению ; просто верните желаемое значение и попросите вызывающего добавить его в переменную.
например.
function check_cases {
case $1 in
r) echo " Read" ;;
w) echo " Write" ;;
x) echo " Execution" ;;
esac
}
var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"
echo $var
Непонятно, чего вы хотите достичь, но в любом случае ...
Прежде всего, синтаксис для присвоения значений не
$val=value
, а
val=value
В любом случае
1=value
не сработает, потому что имя переменной не может начинаться с числа.
Чтобы присвоить значения позиционным параметрам, сделайте следующее:
function check_cases {
case $2 in
r) append=' Read';;
w) append=' Write';;
x) append=' Execution';;
esac
set "$1""$append" "$2" # notice no space between "$1" and "$append"
echo "$@" # print all parameters
echo Number of parameters: $#
}