У меня есть сценарий, который нормально работает на моем сервере разработки, но когда я пытаюсь запустить его в производственной среде, он не работает.
Я получаю следующую ошибку, которую не могу понять:
./test.sh: строка 5: UID: переменная только для чтения
Какие-либо предложения?
#!/bin/sh
while read inputline
do
UID="$(echo $inputline | cut -d '"' -f4)"
PASSWORD="$(echo $inputline | cut -d '"' -f8)"
FIRST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f1)"
LAST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f2)"
zmprov createAccount $UID $PASSWORD displayName "$FIRST $LAST" givenName $FIRST sn $LAST
done < company.csv
Рекомендуется использовать в сценариях оболочки переменные в нижнем регистре, поскольку переменные в верхнем регистре обычно зарезервированы для внутренних компонентов оболочки. (Переменные среды являются исключением из этого правила, но на самом деле с ними следует обращаться так же, как с вещами со специальным значением, которые вы не должны произвольно изменять, не понимая, что вы делаете.) В этом случае bash
наборы $UID
в Unix uid, под которым он работает, и не позволяет его изменять или использовать переменную для чего-либо еще. Снаряды кроме bash
(sh
может быть dash
или другая оболочка на некоторых платформах) может не использовать $UID
таким образом, и если bash
был построен для работы в режиме совместимости с оболочкой Борна при вызове как sh
(это значение по умолчанию, но многие дистрибутивы Linux отключили это) он не лечит $UID
как особенный тоже.
UID
- это системная зарезервированная переменная с информацией об идентификаторе пользователя, под которым работает ваш скрипт. Вы должны быть осторожны, чтобы не использовать стандартные имена переменных, которые может использовать система. Ты можешь использовать env
чтобы получить список текущих настроек. Не меняйте ничего из этого. Вы также можете использовать имена переменных в Google, чтобы увидеть, появляются ли они у других пользователей, прежде чем продолжить с ними.
В этом случае использование нижнего регистра, вероятно, решит вашу проблему, поскольку зарезервированы только варианты верхнего регистра, но вы также можете сделать свои переменные уникальными, вызвав их что-то вроде $ input_uid, чтобы было ясно, что значение поступило из ввода в сценарий. Это упростит сопровождение вашего кода в долгосрочной перспективе.