Estoy escribiendo un script bash donde quiero salir si el usuario no es root. El condicional funciona bien, pero el script no sale.
[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)
He intentado usar en &&
lugar de ;
pero tampoco trabajo.
bash
shell
shell-script
scripting
Garrett Hall
fuente
fuente
exit 1
para hacer entender el proceso padre que ocurrió un problema.[[
para la comparación numérica, use((
.[[
está bien, siempre que lo uses en-eq
lugar de==
.(( EUID )) && ...
Los paréntesis alrededor de esos comandos crean una subshell . Su eco de subshell "Debe ser root para ejecutar el script" y luego le dice al subshell que salga (aunque ya lo habría hecho, ya que no había más comandos). La forma más fácil de solucionarlo es probablemente usar un
if
:fuente
id -u == 0
, lo que significaría que usted es root. Que desea[[ $(id -u) != 0 ]]; then
.[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1;
también tenga en cuenta el$UID
, lo que ahorra el proceso de desove. Creo que incluso podrías preferirlo$EUID
.((UID)) && echo 'You have to be root.' && exit 1
.set -e
abortará. Una solución a ese problema es[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1 || true
.Con bash :
fuente
echo
falla (por ejemplo, porque stdout no se puede escribir).Corchetes
||
y&&
no son necesarias ya que estos son asociativo por la derecha. Las siguientes dos expresiones son equivalentes:Entonces, en
&&
lugar de;
funcionaría bien, comoecho
volverá cierto.fuente
esto podría ayudarte, en bash
fuente