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:

 /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!

  • Deshabilitar la authentication de dos factores para macOS?
  • Instale Sierra como sistema operativo invitado en VM con Parallels 12
  • ¿Por qué Disk Utility crea particiones EFI en discos externos?
  • Dónde se almacenan los files / configuraciones de configuration de ethernet / internet / networking en OS X 10.6
  • ¿Puedo usar El Capitán en una MacBook que se envía con Sierra?
  • Root crontab no saveá
  • Destello en OS X Lion
  • ¿Cómo obtengo acceso programático a la definición de la palabra después de que aparece al resaltar (tocar con tres dedos) una palabra en OS X?
  • 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).