Buscar el directorio de inicio de sesión y de usuario conectado con un script bash

2

Estoy intentando usar un script para encontrar el nombre de usuario y el directorio de inicio del usuario que actualmente está conectado a una Mac. Esto es lo que tengo y funciona, pero ¿hay una forma mejor (es decir, más simple) de hacerlo?

user='logname'
userHome="eval echo ~'echo $user'"
userHome='$userHome'

La secuencia de comandos casi nunca será ejecutada por el usuario que ha iniciado sesión.

Este es Mac OS X 10.6, unido a un Active Directory, y un usuario de la red ha iniciado sesión. Por lo tanto, el nombre de usuario no aparece en /etc/passwd .

    
pregunta William Jackson 08.06.2011 - 17:50

5 respuestas

2

Este script:

#!/bin/bash
w -h | sort -u -t' ' -k1,1 | while read user etc
do
  homedir=$(dscl . -read /Users/$user NFSHomeDirectory | cut -d' ' -f2)
  echo =$user= =$homedir=
done

hará lo siguiente:

  • encuentre a todos los usuarios conectados (también a través de ssh!) w -h o también puede usar el comando who
  • ordena y encuentra usuarios únicos sort -u -t' ' -k1,1
  • para cada usuario registrado
    • lee el nombre de usuario
    • encuentre su directorio de inicio desde el daemon DirectoryService mediante el comando dscl
    • imprime el nombre de usuario y su directorio de inicio
respondido por el jm666 08.06.2011 - 22:21
1

El usuario se almacena en una variable USER y la casa está en INICIO:

echo user name: $USER, user home: $HOME

Esto se hace automáticamente. No tienes que escribir ningún script para obtenerlos.

    
respondido por el Hai Vu 08.06.2011 - 18:01
1

De esta guía avanzada de creación de scripts , aprendí que

  

El formulario $ (...) ha reemplazado las comillas inversas para la sustitución de comandos.

     

La forma $ (...) de sustitución de comando permite el anidamiento.

Ahora estoy usando:

user=$(logname)
userHome=$(eval echo ~$(echo $user))
    
respondido por el William Jackson 08.06.2011 - 18:35
0

Suponiendo que logname funciona, entonces puede obtener el directorio de inicio de esta manera:

user=$(logname)
userHome=$(awk -F: -v u=$user '$1 == u {print $6}' /etc/passwd)
    
respondido por el glenn jackman 08.06.2011 - 18:35
-2

No estoy seguro si todas las demás complicaciones son necesarias.

echo $USER
echo ~
    
respondido por el Deveras 04.06.2015 - 18:11

Lea otras preguntas en las etiquetas