Я пишу bash-скрипт, куди хочу вийти, якщо користувач не має root. Умовно працює нормально, але сценарій не виходить.
[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)
Я намагався використовувати &&замість, ;але не працюю.
Я пишу bash-скрипт, куди хочу вийти, якщо користувач не має root. Умовно працює нормально, але сценарій не виходить.
[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)
Я намагався використовувати &&замість, ;але не працюю.
Відповіді:
Ви можете зробити це так:
[[ $(id -u) -eq 0 ]] || { echo >&2 "Must be root to run script"; exit 1; }
("звичайний" умовний вираз з арифметичним двійковим оператором у першому твердженні), або:
(( $(id -u) == 0 )) || { echo >&2 "Must be root to run script"; exit 1; }
(арифметичне оцінювання для першого тесту).
Зверніть увагу на зміну ()-> {}- фігурні дужки не породжують нижню частину корпусу. (Шукати man bash"нижню оболонку".)
[[для порівняння чисел, використовувати ((.
[[- це добре, якщо ви використовуєте -eqзамість цього ==.
(( EUID )) && ...
В дужках навколо цих команд створюється піддіаграма . Ваша піддіаграма лунає "Повинен запустити скрипт", і тоді ви скажете підпакеті вийти (хоча це вже було б, оскільки команд більше не було). Найпростіший спосіб виправити це, мабуть, просто використовувати if:
if [[ `id -u` != 0 ]]; then
echo "Must be root to run script"
exit
fi
id -u == 0, що буде означати , що ви є корінь. Ти хочеш [[ $(id -u) != 0 ]]; then.
[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1;також зверніть увагу на те $UID, що економить нерест процесу. Я думаю, ти можеш навіть віддати перевагу $EUID.
((UID)) && echo 'You have to be root.' && exit 1.
set -eбуде скасований. Одним із варіантів вирішення цієї проблеми є [ "$UID" != 0 ] && echo 'You have to be root.' && exit 1 || true.
З баш :
[ $UID -ne 0 ] && echo "Must be root to run script" && exit 1
echoне вдасться (наприклад, тому, що stdout не можна записати ).
Дужки навколо ||і &&не потрібні, оскільки вони є правильними асоціативними. Наступні два вирази еквівалентні:
expr1 || expr2 && expr3
expr1 || { expr2 && expr3 }
Тож &&замість цього ;буде добре працювати, як echoповернеться правда.
[[ $(id -u) == 0 ]] || echo "Must be root to run script" && exit 1
це може допомогти тобі, в баш
[oracle@rac1 ~]$ which bash
/bin/bash
[oracle@rac1 ~]$ cat test1.sh
if [ `id -u` != 0 ]
then
echo "Must be root to run the script
"
exit
fi
exit 1щоб зрозуміти батьківський процес, що сталася проблема.