J'écris un script bash où je veux sortir si l'utilisateur n'est pas root. Le conditionnel fonctionne bien, mais le script ne se ferme pas.
[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)
J'ai essayé d'utiliser &&
au lieu de, ;
mais ni travail.
bash
shell
shell-script
scripting
Garrett Hall
la source
la source
exit 1
afin de faire comprendre au processus parent qu'un problème est survenu.[[
pour la comparaison numérique, utilisez((
.[[
est bien, tant que vous utilisez-eq
au lieu de==
.(( EUID )) && ...
Les parenthèses autour de ces commandes créent un sous - shell . Votre sous-shell renvoie "Doit être la racine pour exécuter le script", puis vous indiquez au sous - shell de quitter (bien qu'il l'aurait déjà fait puisqu'il n'y avait plus de commandes). Le moyen le plus simple de résoudre ce problème consiste probablement à utiliser simplement
if
:la source
id -u == 0
, ce qui voudrait dire que vous êtes root. Vous voulez[[ $(id -u) != 0 ]]; then
.[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1;
Notez également le$UID
, qui enregistre le processus de génération. Je pense que vous pourriez même préférer$EUID
.((UID)) && echo 'You have to be root.' && exit 1
.set -e
. Une solution à ce problème est[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1 || true
.Avec bash :
la source
echo
échouiez (par exemple parce que stdout n'est pas accessible en écriture).Les crochets autour
||
et&&
ne sont pas nécessaires car ils sont associatifs à droite. Les deux expressions suivantes sont équivalentes:Donc,
&&
au lieu de;
fonctionnerait parfaitement, carecho
cela reviendra vrai.la source
cela pourrait vous aider, en bash
la source