Comportamento della shell di login rispetto a Linux, 'sh -c'

2

Ho un comando apparentemente valido che funziona bene su Linux, ma non funziona su OSX, e mi piacerebbe sapere perché.

sudo su - validusername sh -c 'whoami'

Su Linux, questo farà eco 'validusername' sulla console. Tuttavia, OSX mostra un errore:

/bin/sh: /bin/sh: cannot execute binary file

Questa è una particolarità di OSX? O è dovuto al fatto che OSX usa bash 3.2, mentre i nostri box linux sono su bash 4.x?

EDIT: ho trovato rapidamente una soluzione ( sudo -u ), mi interessa soprattutto sapere perché è successo. Grazie!

    
posta mikewaters 27.01.2014 - 23:26
fonte

3 risposte

2

try

sudo -su validusername sh -c 'whoami'
    
risposta data 28.01.2014 - 00:04
fonte
0

o

sudo su - username -c whoami

La pagina man di su dice

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

...

If the optional args are provided on the command line, they are passed to the login shell of the target login. Note that all command line argu- ments before the target login name are processed by su itself, everything after the target login name gets passed to the login shell.

    
risposta data 28.01.2014 - 00:06
fonte
0

OK, per iniziare non hai bisogno sia di "su" che di "sudo" - solo il "su" funzionerà. Dubito anche con Linux che tu abbia la 'sh' dal momento che l'effetto di '-' è quello di eseguire una shell di login, ma ciò che sulla terra la povera shell sta tentando nel tuo comando con entrambi è l'ipotesi di nessuno.

Vivo in un mondo in cui rimuoviamo sudo dalle nostre finestre Linux, quindi non posso controllare se il tuo comando funziona davvero.

Sotto entrambi OS X e Linux il comando su - username -c 'whoami' verrà visualizzato come nome utente.

Ci sono alcune differenze tra "su" e "sudo" che si trovano su Linux e OS X ma sono dovute alle differenze tra la nostra versione rilassata, West Coast, BSD di Unix e la tesa, East Coast, AT & Utilità Gnu derivate da T utilizzate nella distro Linux media piuttosto che nelle versioni di bash in quanto nessuna delle due è bash.

    
risposta data 28.01.2014 - 04:57
fonte

Leggi altre domande sui tag