Estoy en esto desde hace días, necesito verificar si hay un usuario $1 si existe una variable de entorno $2.
Probé algunos casos:
$ [[ -v a ]] && echo "a ok" || echo "a no"
a no
$ [[ -v $HOME ]] && echo "a ok" || echo "a no"
a no
(Entonces no (lo probé en Bash > 4.2))
if [ su - ${1} -c "[ -z "${2}" ]" ]
Ahora, estoy probando este enfoque porque no encuentro lo que está mal :/!
su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
su - root -c "echo "$HOME" | wc | sed 's/ //g'"
Respuesta1
La sintaxis de sus primeros ejemplos es incorrecta. Si tú escribes:
[[ -v $HOME ]]
Entonces en realidad estás ejecutando el comando:
[[ -v /home/yourusername ]]
Lo cual por supuesto va a fracasar. Quieres:
[[ -v HOME ]] && echo ok || echo no
Puedes combinar eso con su
para obtener:
su - root -c "[[ -v HOME ]]" && echo ok || echo no
Sus últimos ejemplos no funcionarán porque no puede anidar comillas y porque la expansión de la variable de shell ocurre antes de la ejecución del comando. Es decir, dado:
su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
El comando que ejecutes en realidad será:
su - root -c 'echo /home/somesuser | ...'
Si desea el valor de $HOME
desde la perspectiva de root
, deberá evitar la expansión de variables en el shell local, por ejemplo, utilizando comillas simples:
su - root -c 'echo $HOME | ...'
No me queda claro por qué estás pasando el resultado a wc
, porque el recuento de palabras $HOME
casi siempre será 1
. En lugar de posprocesar la salida de wc
with sed
o cut
, puedes usar la -w
opción para obtener el recuento de palabras:
su - root -c 'echo $HOME | wc -w'