Помилка сценарію Bash: ./test: рядок 5: UID: змінна лише для читання


9

У мене є сценарій, який добре працює на моєму сервері розробників, але коли я намагаюся запустити його у виробництві, це не працює.

Я отримую таку помилку, яку не можу зрозуміти:

./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

Відповіді:


17

Корисно використовувати маленькі змінні у своїх скриптах оболонки, оскільки великі великі величини зазвичай зарезервовані для внутрішніх оболонок. (Змінні середовища є винятком з цього, але насправді слід поводитись так само, як до речей зі спеціальними значеннями, які не слід довільно змінювати, не розуміючи, що ви робите.) У цьому випадку bashвстановлюється $UIDна uid Unix, який він працює. під, і не дозволить його змінити або використовувати змінну для чого-небудь іншого. Оболонки, окрім bash( shможуть бути dashчи якісь інші оболонки на деяких платформах), можуть не використовувати $UIDцей спосіб, і якщо він bashбув створений для роботи в режимі сумісності оболонок Bourne, коли його викликали як sh(що за замовчуванням, але багато дистрибутивів Linux це відключають) він виграв ' t лікувати$UID як особливий.


5

UIDце системна зарезервована змінна з інформацією про ідентифікатор користувача, на якому працює ваш скрипт. Ви повинні бути обережними, щоб не використовувати стандартні імена змінних, якими може користуватися система. Ви можете використовувати envдля отримання списку того, що зараз встановлено. Не змінюйте жодного з них. Ви можете також імена змінних google, щоб побачити, чи з’являються вони в інших користувачів, перш ніж ви їх продовжуєте.

У цьому випадку використання нижнього регістру, ймовірно, виправить вашу проблему, оскільки зарезервовані лише верхні версії регістру, але ви також можете зробити свої змінні унікальними, назвавши їх чимось на зразок $ input_uid, щоб було зрозуміло, що значення надійшло від введення в сценарій. Це полегшить підтримку вашого коду в довгостроковій перспективі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.