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 1para hacer entender el proceso padre que ocurrió un problema.[[para la comparación numérica, use((.[[está bien, siempre que lo uses en-eqlugar 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 -eabortará. Una solución a ese problema es[ "$UID" != 0 ] && echo 'You have to be root.' && exit 1 || true.Con bash :
fuente
echofalla (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, comoechovolverá cierto.fuente
esto podría ayudarte, en bash
fuente