¿Existe un enlace simbólico estándar al directorio de inicio de los usuarios actuales?

9

El shell puede expandirse ~a su directorio de inicio. $HOMEgeneralmente tiene el mismo trato, pero a menudo desea consultar el directorio de inicio de los usuarios actuales desde un contexto que puede no admitir dicha expansión.

He tenido archivos de configuración donde $HOMEfunciona pero ~no funciona y viceversa.

Supongo que el fusible podría proporcionar algo en este sentido, algo así como /var/myself->$HOME

Con eso podría colocar valores en los archivos de configuración para señalar cosas como /var/myself/backdrops/pornography/wtf/yarly.jpg

¿Hay algo como esto ya? Si no, ¿hay buenas razones para que no haya algo como esto?

Lerc
fuente
2
Esto realmente parece una muy buena idea, y el fusible podría hacerlo bastante trivialmente si recuerdo la interfaz correctamente
Michael Mrozek

Respuestas:

6

Entiendo su preocupación, pero la respuesta es "no", no existe tal cosa.
El método habitual es preguntar al sistema operativo la ruta de inicio del usuario u obtener la variable $ HOME.

Todas estas opciones siempre necesitan algo de codificación de la aplicación. Muchas aplicaciones, como bash, ofrecen el "alias" ~ (open (2) no traduce eso).

Por supuesto, se podría implementar un vfs o un módulo de fusibles para hacer esto. Probablemente haya algo para hacer eso, ¡voy a preguntar eso!

¿Pero es realmente necesario? Puede usar una solución alternativa como:

Keymon
fuente
Solicito la
Keymon
0

Un truco (al menos en Linux) sería cambiar el directorio a $HOMEantes de ejecutar la aplicación y luego usarlo /proc/self/cwd/...en el archivo de configuración.

Neil Mayhew
fuente
Me gusta lo hack de esto, pero presumiblemente tendría problemas si el proceso cambia el directorio actual. Me gustaría un / proc / PID / iwd para el directorio de trabajo inicial.
Lerc
... y para el caso a / proc / PID / home
Lerc
@Lerc, si va en un archivo de configuración que tiene que ser /proc/selfno /proc/PID, ya que no se puede saber de antemano lo que el PID va a ser.
Neil Mayhew
@Lerc, sí, si el proceso cambia de directorio, entonces fallaría, pero normalmente los programas leen el archivo de configuración una vez que se inician y luego almacenan en caché los valores en la memoria. Todo depende del programa con el que esté trabajando, y si el programa no ofrece suficiente flexibilidad, ya sea en la línea de comandos o en la sintaxis del archivo de configuración, entonces está atascado.
Neil Mayhew
Sí, quise decir / proc / PID / home que todos los directorios proc / PID deberían admitir esto y, por lo tanto, incluir / proc / self
Lerc
0

La mayoría de los programas le permiten especificar una ruta al archivo de configuración en la línea de comando. Por lo tanto, podría escribir un contenedor que tome un archivo de configuración estándar, lo filtre para sustituirlo $HOMEpor el usuario actual y luego pase el archivo de configuración temporal modificado al programa.

Neil Mayhew
fuente
Si lo hace, entonces ha tomado la capacidad de especificar una ruta al archivo de configuración lejos del usuario. Podría ser factible si te apetece un rally con un exe de envoltura.
Lerc
0

Puede obtener el pid del usuario requestin y el sistema ask de su directorio personal. Entonces es posible.

Sin embargo, no estoy seguro de si no hay programas SUID que supongan FS como estático.

Editar:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

El código anterior no es ideal, pero debería funcionar para casos comunes.

Maciej Piechotka
fuente
¿Cómo encontrarías su directorio personal después de saber qué usuario es?
WhyNotHugo
Usando getpwuido getpwuid_r.
Maciej Piechotka