
Estoy intentando guardar el directorio de inicio de un usuario en un archivo users.txt, pero sigo guardando el mío. El script le pide al usuario que ingrese su nombre de usuario, que guardé en $username. cuando corro
ls ~ >> users.txt
Muestra ls home/student/am1014
(cuál es mi nombre de usuario)
Supongo que necesito usar sudo para almacenarlo pero no estoy seguro de cómo.
Respuesta1
En:
sudo -u joe ls ~
~
su shell lo expande antes de ejecutar el comando (aquí sudo
), por lo que, en efecto, se ejecuta:
sudo -u joe ls /home/me
Para enumerar el contenido del joe
directorio de inicio de:
ls ~joe
O si no tiene acceso de lectura a su directorio de inicio:
sudo -u joe ls ~joe
O para un shell en ejecucióncomojoe
para ampliar el ~
:
sudo -u joe sh -c 'ls ~'
Tenga en cuenta que, excepto en csh
// tcsh
, zsh
no puede utilizar este ls ~joe
enfoque si el nombre del usuario está en una variable. Dependiendo del caparazón
user=joe
echo ~$user
daría salida /home/mejoe
o ~joe
. En bash
, si se llamaba a un usuario $user
(literalmente), eso devolvería su directorio de inicio.
Aquí necesitarías:
eval "ls ~$user"
(debe asegurarse de que $user
contenga un nombre de usuario válido de antemano).
Respuesta2
El siguiente comando leerá /etc/passwd
y generaráusername : home-dir
awk -F: '{print $1":" $6}' /etc/passwd
La salida será algo como:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games
Puede redirigir la salida a un archivo usando:
awk -F: '{print $1":" $6}' /etc/passwd > result.txt