apertura di un'applicazione in uno script shell con sudo
-
22-10-2019 - |
Domanda
Sto cercando di aprire un app che ascolta la porta 25 all'interno di uno script di shell. Per ascoltare alla porta 25, ho bisogno di eseguire l'applicazione con sudo
. Così ho provato il seguente:
sudo open appThatNeedsPort25
E mi chiede la password e si apre l'applicazione. Il problema è l'applicazione è non essere eseguito come root, quindi non è in grado di ascoltare la porta 25 ...
Cosa devo fare per aprire un app da uno script di shell in modo che possa in ascolto sulla porta 25?
Soluzione
sudo -b
rende la corsa applicazione in background.
sudo -b appThatNeedsPort25
A differenza con sudo appThatNeedsPort25 &
, sudo stesso verrà eseguito in primo piano, in modo da avere problemi con la sua Richiesta password. Nota che sudo ha anche un'opzione -A
per renderlo chiedere una password tramite una GUI invece che nel terminale, è possibile utilizzare questo quando sudo
non è in esecuzione da un terminale.
Altri suggerimenti
Basta provare sudo appthatneedsport25, senza bisogno di usare aperta quando si tratta di bash o script di shell. Se si tratta di uno script interpretato (python ruby, ecc) ed è impostato per isnt eseguibile, si può sempre fare sudo python nomescript.
uso sudo open -a appThatNeedsPort25
A titolo di (un po 'insicuro) alternativa al sudo add vostra chiave SSH al vostro utente root allora si può fare 'ssh root @ localhost appThatNeedsPort25'.
La prima volta che si esegue questa operazione potrebbe essere richiesto per la chiave SSH passphrase, ma dopo che è memorizzato nella cache fino al riavvio.
Come ulteriore ottimizzazione aggiungere questo al vostro file ~ / .ssh / config:
Host root
Hostname 127.0.0.1
User root
Poi si può solo digitare 'ssh radice appThatNeedsPort25' invece.
Ho fatto questo trucco 'ssh root' per anni e mi ha salvato innumerevoli minuti di ri-digitare la password. : -)
lo fate come questo
sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts
In alternativa
# sudoapp: Runs .app with root privileges
# --------------------------------------------------------------------
sudoapp () {
sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
}
$ sudoapp /Applications/TextEdit.app /etc/hosts