Comportamiento de la shell de inicio de session frente a Linux, 'sh -c'

Tengo un command aparentemente válido que funciona bien en los cuadros de Linux pero falla en OSX, y me gustaría saber por qué.

sudo su - validusername sh -c 'whoami' 

En Linux, esto hará eco de 'validusername' en la console. OSX sin embargo, muestra un error:

  • ¿Cómo configuro las variables de entorno en OS X?
  • ¿Puede el automatizador crear enlaces simbólicos pero omitir files existentes?
  • ¿Es posible tener espacios de escape bash en pwd?
  • Usar bash / terminal para get el número de ciclos de recarga de la batería
  • La historia de Bash no se restring en Terminal
  • Cambiar el símbolo del sistema de Terminal
  •  /bin/sh: /bin/sh: cannot execute binary file 

    ¿Es esto una particularidad OSX? ¿O es debido al hecho de que OSX usa bash 3.2, mientras que nuestros linux boxes están en bash 4.x?

    EDITAR: Descubrí una solución rápida ( sudo -u ), estoy interesado principalmente en saber por qué sucedió esto. ¡Gracias!

  • Repare los icons en blanco en stacks y grillas de base
  • ¿Cómo deshabilitar mover una window por su borde adyacente a la barra de desplazamiento?
  • ¿Qué aplicación usar para la captura de fotos de camera web de alta resolución?
  • Menú compartido de Safari (y del sistema): faltan posts y otros elementos en Sierra
  • ¿Qué sucede cuando cierro todas las windows de una aplicación en OSX?
  • Minimice los juegos de Steam en pantalla completa en OS X Yosemite
  • 3 Solutions collect form web for “Comportamiento de la shell de inicio de session frente a Linux, 'sh -c'”

    tratar

     sudo -su validusername sh -c 'whoami' 

    o:

     sudo su - username -c whoami 

    La página su man dice

      su [-] [-c class] [-flms] [login [args]] 

    Si los args opcionales se proporcionan en la línea de command, se pasan al shell de inicio de session del destino de inicio de session. Tenga en count que su propio process procesa todos los arguments de command-line antes del nombre de inicio de session de destino, todo después de que el nombre de inicio de session de destino pasa al shell de inicio de session.

    De acuerdo, para empezar no necesitas tanto 'su' como 'sudo', solo el 'su' servirá. También dudo en Linux que tengas la 'sh' ya que el efecto de '-' es ejecutar un shell de inicio de session, pero no se sabe qué demonios está intentando el pobre shell con tu command.

    Vivo en un mundo en el que eliminamos sudo de nuestros cuadros de Linux, por lo que no puedo verificar si tu command realmente funciona.

    Tanto en OS X como en Linux, el command su - username -c 'whoami' nombre de usuario.

    Existen algunas diferencias entre 'su' y 'sudo' encontradas en Linux y OS X pero se deben a las diferencias entre nuestra versión relajada, costa oeste, versión BSD de Unix y las utilidades Gnu ajustadas, costa este y AT & T utilizadas en la distribución promedio de Linux en lugar de las versiones bash, ya que ninguno es un bash incorporado.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).