¿Es posible ignorar el shell de usuarios en el comando "su"?

9

Si lo hago

su - -c 'mkdir bin' user1

entonces consigo

su: /usr/bin/ksh: No such file or directory

porque el shell de usuarios está configurado kshen /etc/passwdy kshno está instalado.

Pregunta

¿Cómo ejecuto los comandos como usuario en tal caso?

Sandra
fuente
¿Por qué el shell de un usuario está configurado en algo que no existe?
MDMarra
1
/etc/passwdproviene de NIS.
Sandra
1
Bueno, eso explica eso.
MDMarra

Respuestas:

18

Si no pone el -después, suentonces no cargará el entorno de ese usuario, pero los comandos aún se ejecutarán como ese usuario.


Parece que entendí mal tu problema real. Como otros han dicho, -ses la opción que probablemente quieras.

MDMarra
fuente
Eso aún intentará usar el shell que está en / etc / passwd, que parece ser el mayor problema.
Freiheit
El shell coloca su propia identidad en la variable de entorno $ SHELL, pero / etc / passwd es donde su está buscando qué shell ejecutar. `- 'se pasa a la llamada al shell diciéndole que actuar como una concha "login"(bash ejecuta un archivo de perfil en lugar de un archivo .bashrc, cambia el directorio de trabajo, etc)
Freiheit
8

Puedes usar:

su -s /bin/sh -c 'mkdir bin' user1

La -sopción su especifica el shell a usar, anulando lo que esté en / etc / passwd.

Eliminé el -comando porque, además de cargar el perfil, probablemente cambiará el directorio de trabajo al directorio de inicio del usuario para el comando, por lo que estaría creando 'bin' en el directorio de inicio del usuario1, no su actual directorio.

freiheit
fuente
5

Creo que la opción de shell -s / - to le permite elegir el shell para usar mientras mantiene las otras partes del entorno de los usuarios, / bin / sh está especificado por posix, por lo que debería estar disponible en todas partes.

Roman A. Taycher
fuente