Оказывается, RVM (именно так я использую Ruby) имеет специальные инструкции для обработки заданий cron.
Что касается моей общей проблемы с cron, из исследований выяснилось, что .bashrc/.bash_profile/.profile на самом деле не запускаются cron. Это объясняет, почему ruby не находится в $PATH.
Самый простой ответ - установить NAME = 0 SURNAME = 1
и использовать эти переменные вместо индексов 0 и 1. однако в вашем массиве ...
Вы можете делать то, что хотите, довольно затянувшимся способом, используя дисциплинарные функции . Для каждой переменной может быть определена функция set ()
; он будет вызываться каждый раз при изменении переменной. Аналогично для get ()
. Таким образом, вы можете сделать следующее:
#!/bin/ksh
typeset -C person
function person.name.set {
person_arr[0]=${.sh.value}
}
function person.name.get {
.sh.value=${person_arr[0]}
}
function person.surname.set {
person_arr[1]=${.sh.value}
}
function person.surname.get {
.sh.value=${person_arr[1]}
}
typeset -a person_arr
person_arr[0]=first person_arr[1]=second
echo "name is ${person.name} ${person.surname}"
person.name=first2 person.surname=second2
echo "name is ${person.name} ${person.surname}"
echo "name is ${person_arr[@]}"
Это объявляет составную переменную person
и дисциплинарные функции для подименов .name
и .surname
. Функции set ()
устанавливают соответствующее индексированное значение person_arr
на новое значение (в .sh.value
), а get ()
функции «возвращают» соответствующее индексированное значение, задавая .sh.value
.
В примере для версии массива устанавливается одно значение, а затем они заменяются составными именами. Результатом будет
name is first second
name is first2 second2
name is first2 second2
. Если у вас есть несколько переменных, которые вы хотите привязать таким образом, вам следует искать решение, используя ваш собственный тип ksh .
В ksh93
составные имена переменных и namerefs
не идут вместе, но работает наоборот:
typeset -n First=person.name
typeset -n Last=person.surname
person.name=John
person.surname=Doe
echo $First $Last
John Doe